栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SSM酒店管理系统项目Day8

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SSM酒店管理系统项目Day8

文章目录

12.4.重置密码12.5.分配角色

12.5.1.初始化用户角色列表12.5.2.分配角色 12.6 获取当前登录用户

12.6.1.数据层12.6.2.业务层12.6.3.控制层 12.7 优化查询12.8 自定义403页面
建议配合视频学习食用(5-2~5-7):
https://www.bilibili.com/video/BV1rr4y1F7Y2?p=1

12.4.重置密码

1.控制层
userManager.jsp添加一个function

        
        function resetPwd(data) {
            layer./confirm/i("确定要重置["+data.realName+"]用户的密码吗?",{icon:3,title:"提示"},function (index) {
                //发送请求
                $.post("/admin/user/resetPwd",{"id":data.id},function(result){
                    if(result.success){
                        //提示
                        layer.alert(result.message,{icon:3});
                        //刷新数据表格
                        tableIns.reload();
                    }else{
                        //提示
                        layer.alert(result.message,{icon:2});
                    }
                },"json");


                layer.close(index);
            });
        }

UserController.java

    

    @ResponseBody
    @RequestMapping("/resetPwd")
    public String resetPwd(Integer id){
        Map map = new HashMap();
        if(userService.resetPwd(id)>0){
            map.put(SystemConstants.SUCCESS,true);
            map.put(SystemConstants.MESSAGE,"重置密码成功");
        }else{
            map.put(SystemConstants.SUCCESS,false);
            map.put(SystemConstants.MESSAGE,"重置密码失败");
        }
        return JSON.toJSONString(map);
    }

2.业务层
SysUserService.java

    
    int resetPwd(Integer id);

SysUserServiceImpl.java

    
    public int resetPwd(Integer id) {
        //创建用户对象
        SysUser sysUser = new SysUser();
        sysUser.setId(id);//用户ID
        //sysUser.setModifyBy(userId);//修改人
        sysUser.setPassword(PasswordUtil.encode(SystemConstants.DEFAULT_PASSWORD));
        sysUser.setModifyDate(new Date());
        return userMapper.updateUser(sysUser);
    }

3.重置密码本身和修改用户差差不多,所以简单的重置密码不需要重新设置dao层

12.5.分配角色 12.5.1.初始化用户角色列表

1.控制层
jsp添加两个function 一个调出表单 一个调出角色列表

        
        function grantRole(data) {
            mainIndex = layer.open({
                type:1,
                title:"分配["+data.realName+"]角色",
                area: ["1000px", "500px"],//窗口宽高
                content: $("#selectUserRoleDiv"),//引用的内容窗口
                btn:["确定","取消"],
                yes:function(index,layero){
                    //选中行对象
                    var checkStatus = table.checkStatus('roleTable');
                    //定义数组,保存选中行的ID
                    var idArr = [];
                    //判断是否有选中行
                    if(checkStatus.data.length>0){
                        //获取选中行的数据
                        for (let i = 0; i < checkStatus.data.length; i++) {
                            idArr.push(checkStatus.data[i].id);//角色ID
                        }
                        //将数组转成字符串
                        var ids = idArr.join(",");
                        //发送请求(参数分别是角色ID,用户ID)
                        $.post("/admin/user/grantRole",{"ids":ids,"userId":data.id},function(result){
                            if(result.success){
                                layer.alert(result.message,{icon:1});
                            }else{
                                layer.alert(result.message,{icon:2});
                            }
                        },"json");

                        //关闭分配角色窗口
                        //layer.close(mainIndex);

                    }else{
                        layer.msg("请选择要分配的角色");
                    }
                },
                btn2:function(index,layero){
                    //关闭当前窗口
                    layer.close(index);
                },
                success:function () {
                    //初始化加载角色数据
                    initRoleData(data);
                }
            });
        }


        
        function initRoleData(data) {
            table.render({
                elem: '#roleTable',
                url: '${pageContext.request.contextPath}/admin/role/initRoleListByUserId?userId='+data.id,
                cols: [[
                    {type: "checkbox", width: 50},
                    {field: 'id', width: 100, title: '角色编号', align: "center"},
                    {field: 'roleCode', minWidth: 150, title: '角色编码', align: "center"},
                    {field: 'roleName', minWidth: 150, title: '角色名称', align: "center"},
                    {field: 'roleDesc', minWidth: 200, title: '角色描述', align: "center"},
                ]],
            });
        }

RoleController.java 查询两张表 一张是全部角色列表 一张是当前用户角色列表,然后循环遍历两个集合

   
    @RequestMapping("/initRoleListByUserId")
    public DataGridViewResult initRoleListByUserId(Integer userId){
        //调用查询所有角色列表的方法
        List> roleListByMap = roleService.findRoleListByMap();
        //调用根据用户ID查询该用户拥有的角色列表方法
        List roleListWithUserId = roleService.findRoleListWithUserId(userId);
        //循环遍历两个集合的数据是否出现相同的值(两个集合中的角色ID是否相等,如果相等,表示该用户有这个角色,则需要将复选框选中)
        for (Map map : roleListByMap) {
            //定义变量,标识是否选中
            boolean flag = false;//默认不选中
            //获取角色ID
            Integer roleId = (Integer) map.get("id");//id是角色主键,以主键作为map集合中key
            //内层循环遍历拥有拥有的角色列表
            for (Integer rid : roleListWithUserId) {
                //比较两个集合中的角色ID是否相等
                if(rid == roleId){
                    //修改状态值
                    flag = true;
                    break;
                }
            }
            //将状态保存到Map集合中
            map.put("LAY_CHECKED",flag);//key必须为LAY_CHECKED
        }
        //返回数据
        return new DataGridViewResult(roleListByMap);
    }

2.业务层
RoleService.java

    
    List> findRoleListByMap();


    
    List findRoleListWithUserId(Integer userId);

RoleServiceImpl.java

    
    public List> findRoleListByMap() {
        return roleMapper.findRoleListByMap();
    }

    
    public List findRoleListWithUserId(Integer userId) {
        return roleMapper.findRoleListWithUserId(userId);
    }

3.数据层
RoleMapper.java

    
    @Select("select * from sys_role")
    List> findRoleListByMap();


    
    @Select("select rid from sys_user_role where uid = #{userId}")
    List findRoleListWithUserId(Integer userId);
12.5.2.分配角色

1.控制层 UserController.java

    
    @ResponseBody
    @RequestMapping("/grantRole")
    public String  grantRole(String ids,Integer userId){
        Map map = new HashMap();
        if(userService.saveUserRole(ids,userId)){
            map.put(SystemConstants.SUCCESS,true);
            map.put(SystemConstants.MESSAGE,"角色分配成功");
        }else{
            map.put(SystemConstants.SUCCESS,false);
            map.put(SystemConstants.MESSAGE,"角色分配失败");
        }
        return JSON.toJSONString(map);
    }

2.业务层
SysUserService.java

    
    boolean saveUserRole(String ids, Integer userId);

SysUserServiceImpl.java

    public boolean saveUserRole(String ids, Integer userId) {

        try {
            //保存用户角色关系前,先将原有的关系清空
            userMapper.deleteUserRoleByUserId(userId);
            //将字符串ID拆分成数组
            String[] split = ids.split(",");
            for (int i = 0; i < split.length; i++) {
                //调用保存用户角色关系的方法
                userMapper.saveUserRole(Integer.valueOf(split[i]),userId);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }


        return false;
    }

3.数据层 UserMapper.java

    
    @Insert("insert into sys_user_role (uid,rid) values(#{userId},#{roleId})")
    void saveUserRole(@Param("roleId") Integer roleId, @Param("userId") Integer userId);
12.6 获取当前登录用户

在之前的添加和修改用户,重置密码的时候,创建人默认为1,现在优化创建人的数据,将创建人设置为当前登录用户

12.6.1.数据层

SysUserMapper.java 新增加一个根据用户名查询用户信息的方法

    
    @Select("select * from sys_user where userName = #{userName}")
    SysUser getUserByUserName(String userName);

12.6.2.业务层

SysUserService.java

    
    SysUser getUserByUserName(String userName);

SysUserServiceImpl.java

    public SysUser getUserByUserName(String userName) {
        return userMapper.getUserByUserName(userName);
    }
12.6.3.控制层

UserController.java 在添加和修改用户的方法中添加获取当前登录用户信息,



在重置密码的时候也要获取登录用户的id,所以重置密码的service层需要修改下对应的方法


12.7 优化查询

对于普通用户在登录的时候不让他查出超级管理员的信息,在用户表中有一列userType列描述用户的状态信息,当=1时代表管理员;=2时代表普通用户(默认),所以当userType=2时就只能查看普通用户的信息。
在UserController.java的查询用户列表信息的方法中修改

12.8 自定义403页面

1.直接在webapp下新添加一个403页面
403.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>



    
    HTTP 403 - 禁止访问-发生错误
    
    
    


HTTP 403 - 禁止访问-你所浏览的页面暂时无法访问

你可以返回上一页重试,或直接向我们反馈错误报告

2.修改 spring-security.xml


3.刷新hotel-manager

4.效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/710921.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号