當前位置:網站首頁>SSM酒店管理系統項目Day8

SSM酒店管理系統項目Day8

2022-01-28 05:26:11 qq_1291799550


建議配合視頻學習食用(5-2~5-7):
https://www.bilibili.com/video/BV1rr4y1F7Y2?p=1

12.4.重置密碼

1.控制層
userManager.jsp添加一個function

        /**
         * 重置密碼
         * @param id
         */
        function resetPwd(data) {
    
            layer.confirm("確定要重置[<font color='red'>"+data.realName+"</font>]用戶的密碼嗎?",{
    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

    /**
     * 重置密碼
     * @param id
     * @return
     */

    @ResponseBody
    @RequestMapping("/resetPwd")
    public String resetPwd(Integer id){
    
        Map<String,Object> map = new HashMap<String,Object>();
        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

    /**
     * 重置密碼
     * @param id
     * @return
     */
    int resetPwd(Integer id);

SysUserServiceImpl.java

    /**
     * 重置密碼
     * @param id
     * @return
     */
    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 一個調出錶單 一個調出角色列錶

        /**
         * 打開分配角色窗口
         * @param data
         */
        function grantRole(data) {
    
            mainIndex = layer.open({
    
                type:1,
                title:"分配[<font color='red'>"+data.realName+"</font>]角色",
                area: ["1000px", "500px"],//窗口寬高
                content: $("#selectUserRoleDiv"),//引用的內容窗口
                btn:["<i class='layui-icon layui-icon-ok'></i>確定","<i class='layui-icon layui-icon-close'></i>取消"],
                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);
                }
            });
        }


        /**
         * 初始化角色列錶
         * @param 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 查詢兩張錶 一張是全部角色列錶 一張是當前用戶角色列錶,然後循環遍曆兩個集合

   /**
     * 初始化角色列錶
     * @param userId
     * @return
     */
    @RequestMapping("/initRoleListByUserId")
    public DataGridViewResult initRoleListByUserId(Integer userId){
    
        //調用查詢所有角色列錶的方法
        List<Map<String, Object>> roleListByMap = roleService.findRoleListByMap();
        //調用根據用戶ID查詢該用戶擁有的角色列錶方法
        List<Integer> roleListWithUserId = roleService.findRoleListWithUserId(userId);
        //循環遍曆兩個集合的數據是否出現相同的值(兩個集合中的角色ID是否相等,如果相等,錶示該用戶有這個角色,則需要將複選框選中)
        for (Map<String, Object> 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

    /**
     * 查詢所有角色
     * @return
     */
    List<Map<String,Object>> findRoleListByMap();


    /**
     * 根據用戶ID查詢該用戶擁有的角色列錶(只查詢角色ID)
     * @param userId
     * @return
     */
    List<Integer> findRoleListWithUserId(Integer userId);

RoleServiceImpl.java

    /**
     * 查詢所有角色
     *
     * @return
     */
    public List<Map<String, Object>> findRoleListByMap() {
    
        return roleMapper.findRoleListByMap();
    }

    /**
     * 根據用戶ID查詢該用戶擁有的角色列錶(只查詢角色ID)
     *
     * @param userId
     * @return
     */
    public List<Integer> findRoleListWithUserId(Integer userId) {
    
        return roleMapper.findRoleListWithUserId(userId);
    }

3.數據層
RoleMapper.java

    /**
     * 查詢所有角色
     * @return
     */
    @Select("select * from sys_role")
    List<Map<String,Object>> findRoleListByMap();


    /**
     * 根據用戶ID查詢該用戶擁有的角色列錶(只查詢角色ID)
     * @param userId
     * @return
     */
    @Select("select rid from sys_user_role where uid = #{userId}")
    List<Integer> findRoleListWithUserId(Integer userId);

12.5.2.分配角色

1.控制層 UserController.java

    /**
     * 分配角色
     * @param ids
     * @param userId
     * @return
     */
    @ResponseBody
    @RequestMapping("/grantRole")
    public String  grantRole(String ids,Integer userId){
    
        Map<String,Object> map = new HashMap<String,Object>();
        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

    /**
     * 保存用戶角色關系
     * @param ids
     * @param userId
     * @return
     */
    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

    /**
     * 保存用戶角色關系
     * @param roleId
     * @param userId
     */
    @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 新增加一個根據用戶名查詢用戶信息的方法

    /**
     * 根據用戶名查詢用戶信息
     * @param userName
     * @return
     */
    @Select("select * from sys_user where userName = #{userName}")
    SysUser getUserByUserName(String userName);

12.6.2.業務層

SysUserService.java

    /**
     * 根據用戶名查詢用戶信息
     * @param userName
     * @return
     */
    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" %>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>HTTP 403 - 禁止訪問-發生錯誤</title>
    <meta name="robots" content="noindex,nofollow" />
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <style>
        * {
    -moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
        html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,caption,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video {
    margin:0;padding:0;border:0;outline:0;vertical-align:baseline;background:transparent;}
        article,aside,details,figcaption,figure,footer,header,hgroup,nav,section {
    display:block;}
        html {
    font-size:16px;line-height:24px;width:100%;height:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;overflow-y:scroll;overflow-x:hidden;}
        img {
    vertical-align:middle;max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;}
        body {
    min-height:100%;background:#edf1f4;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",微軟雅黑,Arial,sans-serif;}
        .clearfix {
    clear:both;zoom:1;}
        .clearfix:before,.clearfix:after {
    content:"\0020";display:block;height:0;visibility:hidden;}
        .clearfix:after {
    clear:both;}
        body.error-page-wrapper,.error-page-wrapper.preview {
    background-position:center center;background-repeat:no-repeat;background-size:cover;position:relative;}
        .error-page-wrapper .content-container {
    border-radius:2px;text-align:center;box-shadow:1px 1px 1px rgba(99,99,99,0.1);padding:50px;background-color:#fff;width:100%;max-width:560px;position:absolute;left:50%;top:50%;margin-top:-220px;margin-left:-280px;}
        .error-page-wrapper .content-container.in {
    left:0px;opacity:1;}
        .error-page-wrapper .head-line {
    transition:color .2s linear;font-size:40px;line-height:60px;letter-spacing:-1px;margin-bottom:20px;color:#777;}
        .error-page-wrapper .subheader {
    transition:color .2s linear;font-size:32px;line-height:46px;color:#494949;}
        .error-page-wrapper .hr {
    height:1px;background-color:#eee;width:80%;max-width:350px;margin:25px auto;}
        .error-page-wrapper .context {
    transition:color .2s linear;font-size:16px;line-height:27px;color:#aaa;}
        .error-page-wrapper .context p {
    margin:0;}
        .error-page-wrapper .context p:nth-child(n+2) {
    margin-top:16px;}
        .error-page-wrapper .buttons-container {
    margin-top:35px;overflow:hidden;}
        .error-page-wrapper .buttons-container a {
    transition:text-indent .2s ease-out,color .2s linear,background-color .2s linear;text-indent:0px;font-size:14px;text-transform:uppercase;text-decoration:none;color:#fff;background-color:#2ecc71;border-radius:99px;padding:8px 0 8px;text-align:center;display:inline-block;overflow:hidden;position:relative;width:45%;}
        .error-page-wrapper .buttons-container a:hover {
    text-indent:15px;}
        .error-page-wrapper .buttons-container a:nth-child(1) {
    float:left;}
        .error-page-wrapper .buttons-container a:nth-child(2) {
    float:right;}
        @media screen and (max-width:580px) {
    
            .error-page-wrapper {
    padding:30px 5%;}
            .error-page-wrapper .content-container {
    padding:37px;position:static;left:0;margin-top:0;margin-left:0;}
            .error-page-wrapper .head-line {
    font-size:36px;}
            .error-page-wrapper .subheader {
    font-size:27px;line-height:37px;}
            .error-page-wrapper .hr {
    margin:30px auto;width:215px;}
        }
        @media screen and (max-width:450px) {
    
            .error-page-wrapper {
    padding:30px;}
            .error-page-wrapper .head-line {
    font-size:32px;}
            .error-page-wrapper .hr {
    margin:25px auto;width:180px;}
            .error-page-wrapper .context {
    font-size:15px;line-height:22px;}
            .error-page-wrapper .context p:nth-child(n+2) {
    margin-top:10px;}
            .error-page-wrapper .buttons-container {
    margin-top:29px;}
            .error-page-wrapper .buttons-container a {
    float:none !important;width:65%;margin:0 auto;font-size:13px;padding:9px 0;}
            .error-page-wrapper .buttons-container a:nth-child(2) {
    margin-top:12px;}
        }
    </style>
</head>
<body class="error-page-wrapper">
<div class="content-container">
    <div class="head-line">
        <img src="/statics/images/error.svg" alt="" width="120"/>
    </div>
    <div class="subheader">
        HTTP 403 - 禁止訪問-你所瀏覽的頁面暫時無法訪問    </div>
    <div class="hr"></div>
    <div class="context">

        <p>
            你可以返回上一頁重試,或直接向我們反饋錯誤報告        </p>

    </div>
    <div class="buttons-container">
        <a href="/">返回主頁</a>
        <a href="/">反饋錯誤</a>
    </div>
</div>
</body>
</html>


2.修改 spring-security.xml
在這裏插入圖片描述

在這裏插入圖片描述
3.刷新hotel-manager
在這裏插入圖片描述
4.效果
在這裏插入圖片描述

版權聲明
本文為[qq_1291799550]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201280526108311.html

隨機推薦