• 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(资源)和权限表示方式不规范。

  • 相关阅读:
    opencv和linux的关联
    附加数据库 对于server XXX失败
    android.app.Dialog(23)里window的那些事(坑)
    hdu 4722 Good Numbers(数位dp)
    Java程序猿必知的10个调试技巧
    iir调试记录
    在Scope利用Content sharing Widget来分享内容
    JavaEE 技术选型建议,server配置,部署策略
    x265探索与研究(四):怎样编码视频?
    计算git树上随意两点的近期切割点。
  • 原文地址:https://www.cnblogs.com/yaowen/p/8734085.html
Copyright © 2020-2023  润新知