Servlet实现RBAC权限管理(二)中

简介: Servlet实现RBAC权限管理(二)

二. 权限认证


目录结构如下所示:


20200511092859926.png


二.一 认证和授权


在登录的方法里面,进行验证,如果查询出有这个员工的信息,就去查询这个员工的权限数据。


这个方法 写在 UserServlet 的 login 方法里面。


二.一.一 登录方法进行认证和查询权限



public void login(HttpServletRequest req,HttpServletResponse resp){
    //将请求信息,封装到对象里面。
    User userInfo=super.reqParamToBean(req,User.class);
    userService=new UserServiceImpl();
    //从数据库中查询密码
    User user=userService.login(userInfo);
    if(user!=null){
      //说明登录成功,放置到session里面
      HttpSession session=req.getSession();
      session.setAttribute("loginUser",user);
      //查询一下,该员工的 按钮权限信息。
      privilegeService=new PrivilegeServiceImpl();
      List<Privilege> privilegeList= privilegeService.getPrivilegeByUId(user.getId(),2);
      List<String> priCodeList=new ArrayList<String>();
      for(Privilege pri:privilegeList){
        if(pri.getPercode()!=null){
          //放置标识
          priCodeList.add(pri.getPercode());
        }
      }
      JsonConfig jsonConfig = new JsonConfig();
      JSONArray objData=JSONArray.fromObject(priCodeList,jsonConfig);
      JSONObject objMap=new JSONObject();
      objMap.put("data",objData);
      //转换成 json 字符串对象
      session.setAttribute("privilegeList",objMap.toString());
      //登录成功
      super.boolean2Json(resp, true);
    }else{
      //代码为001,表示用户名或者密码错误
       super.map2Json(resp,"001");
    }
} 


如果登录成功,那么就跳转到 main.jsp 的页面。


(该代码存放在 login.jsp 的页面)


20200511092914137.png


二.一.二 权限菜单展示


main.jsp 的左侧菜单,是动态地读取出来的,然后渲染到页面上。


二.一.二.一 菜单 div


<!-- 存放左侧的菜单事件 -->
<div class="leftmenu" id="leftmenu">
    <div id="leftmenu_0" class="leftmenu-item">
    </div>
</div>


二.一.二.二 根据登录者id 动态查询权限,渲染到页面 leftmenu 上


/*获取所有的权限信息*/
      function getAllPrivilege(){
            //取出当前登录的用户信息
             var userId='${sessionScope.loginUser.id}';
             console.log("id:"+userId);
             $.post("Privilege?method=getPrivilegeByUId",{userId:userId},function(data){
               //查询出权限
               var allPrivilegeList=data.data;
               createMenuByData($("#leftmenu_0"),allPrivilegeList);
             })
            }
      //执行获取权限的方法
            getAllPrivilege();
            //渲染到页面里面
            function createMenuByData(target,allPrivilegeList){
              target.empty();
              var firstMenus=[];
              var secondMenus=[];
              $.each(allPrivilegeList,function(idx,item){
                //有父
                if(item.pid){
                  secondMenus.push(item);
                }else{
                  firstMenus.push(item);
                }
              })
              $.each(firstMenus,function(idx,item){
                var $dl=$("<dl id='"+item.id+"'><dt>"+item.name+"</dt></dl>");
                var $dd=$("<dd id='"+item.id+"'></dd>");
                var $ul=$('<ul id="'+item.id+'" class="clearfix"></ul>');
                $dd.append($ul);
                $dl.append($dd);
                $.each(secondMenus,function(idx1,item1){
                  if(item1.pid==item.id){
                    var $li=$('<li id="'+item1.id+'"><a href="javascript:void(0);" 
      data-link="'+item1.url+'">'+item1.name+'</a></li>');
                    $ul.append($li);  
                  }
                })
                target.append($dl);
              })
            }


二.一.二.三 根据用户编号,查询该用户的权限


PrivilegeServiceImpl 实现类里面的 getPrivilegeByUId() 方法。


20200511092923172.png


二.一.二.四 展示 按钮的权限


上面一部分,可以根据登录者的id 动态地展示 菜单权限,下面根据登录者的id 动态地展示页面上按钮的权限。


用 部门表 dept 进行举例。


  1. 设置标识,后面根据标识来控制按钮的显示与隐藏


<script>
      //获取权限 
      var privilegeList='<%=session.getAttribute("privilegeList")%>'; 
      //console.log("值是:"+privilegeList+","+typeof(privilegeList));
      var objPrivilegeList=JSON.parse(privilegeList);
      $.each(objPrivilegeList.data,function(idx,item){
        //将标识存放在 sessionStorage 里面,进行暂时的保存。 
        sessionStorage.setItem(item,true);
      })
</script>
<script type="text/javascript" src="${pageContext.request.contextPath}/static/js/dept.js"></script>


  1. dept.js 里面,从sessionStorage 里面取出标识,进行显隐


20200511092931706.png


二.一.三 退出登录按钮


二.一.三.一 前端页面实现


<div class="right">
        <span>
            <a href="javascript:void(0);" onclick="window.location.href='User?method=logout'">退出</a>
        </span>
    </div>


二.一.三.二 退出后台实现


//退出登录
  public String logout(HttpServletRequest req,HttpServletResponse resp){
    HttpSession session=req.getSession();
    //注销
    session.invalidate();
    return "login";
  }


二.二 不同用户地验证测试


二.二.一 admin 管理员验证


输入网址: http://localhost:8080/Servlet_RBAC/User?jsp=toLogin


填入 用户名为 admin, 密码是 1234


20200511092959984.png


点击登录:


20200511093004389.png


菜单显示是正常的, 没有添加和修改的权限,按钮显示是正常的。



相关文章
|
前端开发 Java 数据安全/隐私保护
用servlet和过滤器实现简单的权限管理和敏感词过滤功能
用servlet和过滤器实现简单的权限管理和敏感词过滤功能
用servlet和过滤器实现简单的权限管理和敏感词过滤功能
|
前端开发 JavaScript Java
Servlet整合Shiro实现RBAC(七)下
Servlet整合Shiro实现RBAC(七)
146 0
Servlet整合Shiro实现RBAC(七)下
|
JSON 前端开发 数据库
Servlet整合Shiro实现RBAC(七)上
Servlet整合Shiro实现RBAC(七)
140 0
Servlet整合Shiro实现RBAC(七)上
|
Java 数据安全/隐私保护
Servlet实现RBAC权限管理(二)下
Servlet实现RBAC权限管理(二)
228 0
Servlet实现RBAC权限管理(二)下
|
前端开发 JavaScript 数据库
Servlet实现RBAC权限管理(二)上
Servlet实现RBAC权限管理(二)
175 0
Servlet实现RBAC权限管理(二)上
|
数据安全/隐私保护
JSP+Servlet培训班作业管理系统[22]–番外篇之过滤器与权限管理
本文目录 1. 本章任务 2. 开发过滤器类 3. 过滤器拦截 4. 过滤器通过 5. 权限管理的实现
118 0
|
1月前
|
Java
学院管理系统【JSP+Servlet+JavaBean】(Java课设)
学院管理系统【JSP+Servlet+JavaBean】(Java课设)
44 3
学院管理系统【JSP+Servlet+JavaBean】(Java课设)
|
1月前
|
Java
排课系统【JSP+Servlet+JavaBean】(Java课设)
排课系统【JSP+Servlet+JavaBean】(Java课设)
36 5
|
1月前
|
Java
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
32 1
|
1月前
|
Java
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
29 2