目录:
(1)用户注册准备
(2)用户注册
(3)非专业权限处理
(4)注册审批
(1)用户注册准备
左侧菜单:

添加跳转注册页面请求:

- //跳转到注册页面请求
- @RequestMapping("/register")
- public String register(Model model){
- List<Department> deps = departmentService.getAllDeps();//获取所有部门
- model.addAttribute("deps",deps);
- return "register";
- }
注册页面的部门是从数据库获取的:
在DepartmentService:添加方法获取部门:

- //获取所有部门
- public List
getAllDeps() { - return departmentMapper.getAllDeps();
- }
在DepartmentMapper接口添加方法:

- //获取所有部门
- List<Department> getAllDeps();
DepartmentMapper.xml中添加sql语句:

- <!--获取所有部门-->
- <select id="getAllDeps" resultType="com.xzb.meeting.model.Department">
- select *
- from department
- </select>
修改注册页面:

使用js判断两次密码是否一样:
给确认密码输入框添加change方法:


(2)用户注册
在register.ftl注册页面给form添加action

在LoginController添加注册请求:

- //注册请求
- @RequestMapping("/doReg")
- public String doReg(Employee employee,Model model){
- int result = employeeService.doReg(employee);
- if (result == 1){
- return "redirect:/";
- }else {
- model.addAttribute("error","注册失败");
- model.addAttribute("employee",employee);//如果注册失败把employee返回去
- return "forward:/register";
- }
- }
在注册页面添加:
value="<#if employee??>${employee.employeeName}#if>等等value信息
name等对应的信息
error的提示信息


修改type为submit

在EmployeeService添加deReg方法:

- //注册请求
- public Integer doReg(Employee employee) {
- Employee emp = employeeMapper.loadEmpByUsername(employee.getUsername());//用户名校验 根据用户姓名查询方法
- if (emp != null){
- return -1;
- }
- employee.setRole(1);//默认角色
- employee.setStatus(0);//默认状态
- return employeeMapper.doReg(employee);
- }
在EmployeeMapper接口里面添加这个doReg这个方法:

- //根据用户姓名查询方法
- Employee loadEmpByUsername(String username);
-
- //用户注册方法
- Integer doReg(Employee employee);
在EmployeeMapper.xml添加这个sql语句,id和方法名对应:

-
- <insert id="doReg">
- insert into employee(employeename,username,phone,email,status,departmentid,password,role)
- values (#{employeeName},#{username},#{phone},#{email},#{status},#{departmentId},#{password},#{role})
- insert>
当数据库中没有这个人时,
跳转到登录页面:

当用户存在这个用户时,会重新倒转到这个页面进行显示:

(3)非专业权限处理
定义拦截器不登录是不能访问页面的:
定义拦截器类PermissInterceptor类:
- package com.xzb.meeting.interceptor;
-
- import com.xzb.meeting.model.Employee;
- import org.springframework.util.AntPathMatcher;
- import org.springframework.web.servlet.HandlerInterceptor;
-
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
-
- /*
- * 拦截器
- *
- * 默认页面、登陆相关页面、注册相关页面放行不拦截
- * role:1为普通用户 2为管理员
- * 获取session判断是否是管理员访问,管理员访问管理员相关页面就放行,普通用户访问管理员相关页面就拦截并输出forbidden
- * 用户没登录,去访问除了注册页面的任意页面都会跳回到登陆页面
- *
- * */
- public class PermissInterceptor implements HandlerInterceptor {
-
- AntPathMatcher pathMatcher = new AntPathMatcher();
-
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
- String requestURI = request.getRequestURI();//拿到请求访问的地址
- //如果访问的是登录页面或者在做登录操作注册
- if ("/".equals(requestURI) || "/doLogin".equals(requestURI) || "/register".equals(requestURI) || "/doReg".equals(requestURI)) {
- return true;
- }
-
- HttpSession session = request.getSession(true);
- Employee currentuser = (Employee) session.getAttribute("currentuser");//从session中获取用户
-
- //如果请求格式是/admin/** 判断是否是管理员
- if (pathMatcher.match("/admin/**", requestURI)) {
- if (currentuser != null) {
- if (currentuser.getRole() == 2) {
- return true;
- }else {
- response.getWriter().write("禁止访问!!!!");
- return false;
- }
- }
- } else {
- if (currentuser != null) {//只要currentuser不等于null 是普通用户就返回true
- return true;
- }
- }
- response.sendRedirect("/");
- return false;//否则放回false 拦截
- }
- }
给左侧菜单栏a标签内添加添加:admin

创建部门Controller:DepartmentController:

当登录普通用户时,在地址栏直接访问这个department请求是不能直接访问的:提示禁止信息

(4)注册审批
创建注册审批Controller:ApproveaccountController类:
- package com.xzb.meeting.controller;
-
- import com.xzb.meeting.service.EmployeeService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.RequestMapping;
-
- @Controller
- @RequestMapping("/admin")
- public class ApproveaccountController {
-
- @Autowired
- private EmployeeService employeeService;
-
- //待批准状态码为0
- public static final Integer PENDING_APPROVE = 0;
-
- //获取所有待批准的用户,并跳转待审批页面
- @RequestMapping("/approveaccount")
- public String approveaccount(Model model){
- model.addAttribute("emps",employeeService.getAllEmpsByStaus(PENDING_APPROVE));
- return "approveaccount";
- }
-
- //更新用户状态(status)
- @RequestMapping("/updatestatus")
- public String updateStatus(Integer employeeid,Integer status){
- employeeService.updateStatus(employeeid,status);
- return "redirect:/admin/approveaccount";//重新返回带审批页面
- }
- }
这个查询的都是用户状态为0的用户信息
- //获取所有待批准的用户,并跳转待审批页面
- @RequestMapping("/approveaccount")
- public String approveaccount(Model model){
- model.addAttribute("emps",employeeService.getAllEmpsByStaus(PENDING_APPROVE));
- return "approveaccount";
- }
在EmployeeService:添加这个方法:

- //获取所有待批准的用户
- public List<Employee> getAllEmpsByStaus(Integer status) {
- return employeeMapper.getAllEmpsByStaus(status);
- }
在EmployeeMapper接口添加这个方法:

- //获取所有待批准的用户
- List<Employee> getAllEmpsByStaus(Integer status);
EmployeeMappe.xml中添加这个方法的sql语句
- <!--获取所有待批准的用户-->
- <select id="getAllEmpsByStaus" resultType="com.xzb.meeting.model.Employee" >
- select *
- from employee
- where status = #{status}
- </select>
删除approveaccount.ftl里面的固定信息,改为从数据库获取:


点击注册审批:

在approveaccount.ftl注册审批页面页面
修改:a标签连接

在 ApproveaccountController中添加方法审批方法:

- //更新用户状态(status)
- @RequestMapping("/updatestatus")
- public String updateStatus(Integer employeeid,Integer status){
- employeeService.updateStatus(employeeid,status);
- return "redirect:/admin/approveaccount";//重新返回带审批页面
- }
在EmployeeService中添加这个方法:

- //更新用户状态(status)
- public Integer updateStatus(Integer employeeid, Integer status) {
- return employeeMapper.updateStatus(employeeid,status);
- }
在EmployeeMapper接口中添加这个方法:

- //更新用户状态(status)
- Integer updateStatus(@Param("employeeid") Integer employeeid,@Param("status") Integer status);
EmployeeMapper.xml添加sql语句:

- <!--更新用户状态(status)-->
- <update id="updateStatus">
- update employee
- set status = #{status}
- where employeeid = #{employeeid}
- </update>
点击通过:

