zoukankan      html  css  js  c++  java
  • shiro2

    mapper接口:根据用户id查询用户权限的菜单

    service接口:根据用户id查询用户权限的菜单

    获取用户权限范围的url

    思路:

    在用户认证时,认证通过,根据用户id从数据库获取用户权限范围的url,将url的集合存储在session中。

    mapper接口:根据用户id查询用户权限的url

    service接口:根据用户id查询用户权限的url

    用户认证通过取出菜单和url放入session
    修改service认证代码:

    菜单动态显示
    修改first.jsp,动态从session中取出菜单显示:

    授权拦截器
    //在执行handler之前来执行的
        //用于用户认证校验、用户权限校验
        @Override
        public boolean preHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler) throws Exception {
            
            //得到请求的url
            String url = request.getRequestURI();
            
            //判断是否是公开 地址
            //实际开发中需要公开 地址配置在配置文件中
            //从配置中取逆名访问url
            
            List<String> open_urls = ResourcesUtil.gekeyList("anonymousURL");
            //遍历公开 地址,如果是公开 地址则放行
            for(String open_url:open_urls){
                if(url.indexOf(open_url)>=0){
                    //如果是公开 地址则放行
                    return true;
                }
            }
            
            //从配置文件中获取公共访问地址
            List<String> common_urls = ResourcesUtil.gekeyList("commonURL");
            //遍历公用 地址,如果是公用 地址则放行
            for(String common_url:common_urls){
                if(url.indexOf(common_url)>=0){
                    //如果是公开 地址则放行
                    return true;
                }
            }
            
            //获取session
            HttpSession session = request.getSession();
            ActiveUser activeUser = (ActiveUser) session.getAttribute("activeUser");
            //从session中取权限范围的url
            List<SysPermission> permissions = activeUser.getPermissions();
            for(SysPermission sysPermission:permissions){
                //权限的url
                String permission_url = sysPermission.getUrl();
                if(url.indexOf(permission_url)>=0){
                    //如果是权限的url 地址则放行,否则跳转拒绝页面。
                    return true;
                }
            }
            
            //执行到这里拦截,跳转到无权访问的提示页面
            request.getRequestDispatcher("/WEB-INF/jsp/refuse.jsp").forward(request, response);
            
            //如果返回false表示拦截不继续执行handler,如果返回true表示放行
            return false;
        }
    配置授权拦截器
    注意:将授权拦截器配置在用户认证拦截的下边。

    1.1 小结

    使用基于url拦截的权限管理方式,实现起来比较简单,不依赖框架,使用web提供filter就可以实现。

    问题:

    需要将所有的url全部配置起来,有些繁琐,不易维护,url(资源)和权限表示方式不规范。

  • 相关阅读:
    发布自己的包到Nuget上
    asp.net core 中的MD5加密
    asp.net core csrf
    KNN算法
    ios测试apk
    python多进程
    机顶盒 gettimeofday()获取毫秒溢出
    Kiggle:Digit Recognizer
    Kaggle:Titanic: Machine Learning from Disaster
    Python抓取微博评论
  • 原文地址:https://www.cnblogs.com/yaowen/p/8734085.html
Copyright © 2011-2022 走看看