• 会议信息管理系统SSM记录(三)



    目录:

    (1)用户注册准备

    (2)用户注册 

    (3)非专业权限处理

    (4)注册审批


    (1)用户注册准备

    左侧菜单: 

    添加跳转注册页面请求:

    1. //跳转到注册页面请求
    2. @RequestMapping("/register")
    3. public String register(Model model){
    4. List<Department> deps = departmentService.getAllDeps();//获取所有部门
    5. model.addAttribute("deps",deps);
    6. return "register";
    7. }

      

    注册页面的部门是从数据库获取的:

    在DepartmentService:添加方法获取部门:

     

    1. //获取所有部门
    2. public List getAllDeps() {
    3. return departmentMapper.getAllDeps();
    4. }

    在DepartmentMapper接口添加方法:

    1. //获取所有部门
    2. List<Department> getAllDeps();

     DepartmentMapper.xml中添加sql语句:

     

    1. <!--获取所有部门-->
    2. <select id="getAllDeps" resultType="com.xzb.meeting.model.Department">
    3. select *
    4. from department
    5. </select>

    修改注册页面:

     

    使用js判断两次密码是否一样:

    给确认密码输入框添加change方法:

     

     

     

     

    (2)用户注册 

    在register.ftl注册页面给form添加action

     在LoginController添加注册请求:

    1. //注册请求
    2. @RequestMapping("/doReg")
    3. public String doReg(Employee employee,Model model){
    4. int result = employeeService.doReg(employee);
    5. if (result == 1){
    6. return "redirect:/";
    7. }else {
    8. model.addAttribute("error","注册失败");
    9. model.addAttribute("employee",employee);//如果注册失败把employee返回去
    10. return "forward:/register";
    11. }
    12. }

     在注册页面添加:

    value="<#if employee??>${employee.employeeName}等等value信息

    name等对应的信息

    error的提示信息

    修改type为submit 

     

    在EmployeeService添加deReg方法:

    1. //注册请求
    2. public Integer doReg(Employee employee) {
    3. Employee emp = employeeMapper.loadEmpByUsername(employee.getUsername());//用户名校验 根据用户姓名查询方法
    4. if (emp != null){
    5. return -1;
    6. }
    7. employee.setRole(1);//默认角色
    8. employee.setStatus(0);//默认状态
    9. return employeeMapper.doReg(employee);
    10. }

     在EmployeeMapper接口里面添加这个doReg这个方法:

    1. //根据用户姓名查询方法
    2. Employee loadEmpByUsername(String username);
    3. //用户注册方法
    4. Integer doReg(Employee employee);

     在EmployeeMapper.xml添加这个sql语句,id和方法名对应:

    1. <insert id="doReg">
    2. insert into employee(employeename,username,phone,email,status,departmentid,password,role)
    3. values (#{employeeName},#{username},#{phone},#{email},#{status},#{departmentId},#{password},#{role})
    4. insert>

     当数据库中没有这个人时,

     跳转到登录页面:

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

    (3)非专业权限处理

     定义拦截器不登录是不能访问页面的:

    定义拦截器类PermissInterceptor类:

    1. package com.xzb.meeting.interceptor;
    2. import com.xzb.meeting.model.Employee;
    3. import org.springframework.util.AntPathMatcher;
    4. import org.springframework.web.servlet.HandlerInterceptor;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import javax.servlet.http.HttpSession;
    8. /*
    9. * 拦截器
    10. *
    11. * 默认页面、登陆相关页面、注册相关页面放行不拦截
    12. * role:1为普通用户 2为管理员
    13. * 获取session判断是否是管理员访问,管理员访问管理员相关页面就放行,普通用户访问管理员相关页面就拦截并输出forbidden
    14. * 用户没登录,去访问除了注册页面的任意页面都会跳回到登陆页面
    15. *
    16. * */
    17. public class PermissInterceptor implements HandlerInterceptor {
    18. AntPathMatcher pathMatcher = new AntPathMatcher();
    19. @Override
    20. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    21. String requestURI = request.getRequestURI();//拿到请求访问的地址
    22. //如果访问的是登录页面或者在做登录操作注册
    23. if ("/".equals(requestURI) || "/doLogin".equals(requestURI) || "/register".equals(requestURI) || "/doReg".equals(requestURI)) {
    24. return true;
    25. }
    26. HttpSession session = request.getSession(true);
    27. Employee currentuser = (Employee) session.getAttribute("currentuser");//从session中获取用户
    28. //如果请求格式是/admin/** 判断是否是管理员
    29. if (pathMatcher.match("/admin/**", requestURI)) {
    30. if (currentuser != null) {
    31. if (currentuser.getRole() == 2) {
    32. return true;
    33. }else {
    34. response.getWriter().write("禁止访问!!!!");
    35. return false;
    36. }
    37. }
    38. } else {
    39. if (currentuser != null) {//只要currentuser不等于null 是普通用户就返回true
    40. return true;
    41. }
    42. }
    43. response.sendRedirect("/");
    44. return false;//否则放回false 拦截
    45. }
    46. }

     给左侧菜单栏a标签内添加添加:admin

     创建部门Controller:DepartmentController:

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

     

     (4)注册审批

    创建注册审批Controller:ApproveaccountController类:

    1. package com.xzb.meeting.controller;
    2. import com.xzb.meeting.service.EmployeeService;
    3. import org.springframework.beans.factory.annotation.Autowired;
    4. import org.springframework.stereotype.Controller;
    5. import org.springframework.ui.Model;
    6. import org.springframework.web.bind.annotation.RequestMapping;
    7. @Controller
    8. @RequestMapping("/admin")
    9. public class ApproveaccountController {
    10. @Autowired
    11. private EmployeeService employeeService;
    12. //待批准状态码为0
    13. public static final Integer PENDING_APPROVE = 0;
    14. //获取所有待批准的用户,并跳转待审批页面
    15. @RequestMapping("/approveaccount")
    16. public String approveaccount(Model model){
    17. model.addAttribute("emps",employeeService.getAllEmpsByStaus(PENDING_APPROVE));
    18. return "approveaccount";
    19. }
    20. //更新用户状态(status)
    21. @RequestMapping("/updatestatus")
    22. public String updateStatus(Integer employeeid,Integer status){
    23. employeeService.updateStatus(employeeid,status);
    24. return "redirect:/admin/approveaccount";//重新返回带审批页面
    25. }
    26. }
     
    

    这个查询的都是用户状态为0的用户信息 

    1. //获取所有待批准的用户,并跳转待审批页面
    2. @RequestMapping("/approveaccount")
    3. public String approveaccount(Model model){
    4. model.addAttribute("emps",employeeService.getAllEmpsByStaus(PENDING_APPROVE));
    5. return "approveaccount";
    6. }

    在EmployeeService:添加这个方法:

    1. //获取所有待批准的用户
    2. public List<Employee> getAllEmpsByStaus(Integer status) {
    3. return employeeMapper.getAllEmpsByStaus(status);
    4. }

    在EmployeeMapper接口添加这个方法:

     

    1. //获取所有待批准的用户
    2. List<Employee> getAllEmpsByStaus(Integer status);

     EmployeeMappe.xml中添加这个方法的sql语句

    1. <!--获取所有待批准的用户-->
    2. <select id="getAllEmpsByStaus" resultType="com.xzb.meeting.model.Employee" >
    3. select *
    4. from employee
    5. where status = #{status}
    6. </select>

    删除approveaccount.ftl里面的固定信息,改为从数据库获取:

     点击注册审批:

     在approveaccount.ftl注册审批页面页面

    修改:a标签连接  

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

    1. //更新用户状态(status)
    2. @RequestMapping("/updatestatus")
    3. public String updateStatus(Integer employeeid,Integer status){
    4. employeeService.updateStatus(employeeid,status);
    5. return "redirect:/admin/approveaccount";//重新返回带审批页面
    6. }

     在EmployeeService中添加这个方法:

    1. //更新用户状态(status)
    2. public Integer updateStatus(Integer employeeid, Integer status) {
    3. return employeeMapper.updateStatus(employeeid,status);
    4. }

     在EmployeeMapper接口中添加这个方法:

    1. //更新用户状态(status)
    2. Integer updateStatus(@Param("employeeid") Integer employeeid,@Param("status") Integer status);

     EmployeeMapper.xml添加sql语句:

    1. <!--更新用户状态(status)-->
    2. <update id="updateStatus">
    3. update employee
    4. set status = #{status}
    5. where employeeid = #{employeeid}
    6. </update>

     点击通过:

     

     

  • 相关阅读:
    Java基础30(作用域)
    基于SSM的个人健康饮食管理小程序系统源码【包调试】
    第23天中视频伙伴计划通过!分享本人心得,希望能帮到路上的你
    洛谷 P3627 [APIO2009]抢掠计划
    单片机——软件部分开发过程介绍
    SLAM从入门到精通(被忽视的基础图像处理)
    纵览机器学习前生今世,万字整理谷歌首席科学家 Jeff Dean 一小时演讲
    RHCE.Tuned
    给奶牛做直播之三
    用大白话从宏观的角度聊一聊asm技术和class字节码文件和动态代理的关系,绝对通俗易懂
  • 原文地址:https://blog.csdn.net/dengfengling999/article/details/127994251