zoukankan      html  css  js  c++  java
  • springmvc 登陆拦截器 配合shiro框架使用

    public class LoginHandlerInterceptor extends HandlerInterceptorAdapter{
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            // TODO Auto-generated method stub
            String path = request.getServletPath();
            if(path.equals("/"))
                return true;
            if(path.matches(Const.NO_INTERCEPTOR_PATH)){
             /**
                     *public static final String NO_INTERCEPTOR_PATH = ".*/((login)|(logout)|(code)|(app)|(weixin)|(static)|(main)|(websocket)|(swagger)|(api)|(api-docs)|(swagger-ui.html )|(webjars)|(swagger-resources)|(v2)).*"; 
               //不对匹配该值的访问路径拦截(正则)*/
                return true;
            }

          else{ //shiro管理的session Subject currentUser = SecurityUtils.getSubject(); Session session = currentUser.getSession(); User user = (User)session.getAttribute(Const.SESSION_USER); if(user!=null){ //判断是否拥有当前点击菜单的权限(内部过滤,防止通过url进入跳过菜单权限) /** * 根据点击的菜单的xxx.do去菜单中的URL去匹配,当匹配到了此菜单,判断是否有此菜单的权限,没有的话跳转到404页面 * 根据按钮权限,授权按钮(当前点的菜单和角色中各按钮的权限匹对) */ Boolean b = true;
              
                    List<Menu> menuList = (List)session.getAttribute(Const.SESSION_allmenuList); //获取菜单列表
                    path = path.substring(1, path.length());
                    for(int i=0;i<menuList.size();i++){
                        for(int j=0;j<menuList.get(i).getSubMenu().size();j++){
                            if(menuList.get(i).getSubMenu().get(j).getMENU_URL().split(".do")[0].equals(path.split(".do")[0])){
                                if(!menuList.get(i).getSubMenu().get(j).isHasMenu()){                //判断有无此菜单权限
                                    response.sendRedirect(request.getContextPath() + Const.LOGIN);
                                    return false;
                                }else{                                                                //按钮判断
                                    Map<String, String> map = (Map<String, String>)session.getAttribute(Const.SESSION_QX);//按钮权限
                                    map.remove("add");
                                    map.remove("del");
                                    map.remove("edit");
                                    map.remove("cha");
                                    String MENU_ID =  menuList.get(i).getSubMenu().get(j).getMENU_ID();
                                    String USERNAME = session.getAttribute(Const.SESSION_USERNAME).toString();    //获取当前登录者loginname
                                    Boolean isAdmin = "admin".equals(USERNAME);
                                    map.put("add", (RightsHelper.testRights(map.get("adds"), MENU_ID)) || isAdmin?"1":"0");
                                    map.put("del", RightsHelper.testRights(map.get("dels"), MENU_ID) || isAdmin?"1":"0");
                                    map.put("edit", RightsHelper.testRights(map.get("edits"), MENU_ID) || isAdmin?"1":"0");
                                    map.put("cha", RightsHelper.testRights(map.get("chas"), MENU_ID) || isAdmin?"1":"0");
                                    session.removeAttribute(Const.SESSION_QX);
                                    session.setAttribute(Const.SESSION_QX, map);    //重新分配按钮权限
                                }
                            }
                        }
                    }
                    return true;
                }else{
                    //登陆过滤
                    response.sendRedirect(request.getContextPath() + Const.LOGIN);
                    return false;
                    //return true;
                }
            }
        }
        
    }
  • 相关阅读:
    如何关闭浏览器的自动完成功能
    <<设计模式C#>>学习笔记一:面向对象编程准备知识
    小心你成“鼠标手”
    中科院公布白领工资标准,香港月入18500才算白领
    在PB中调用IE
    在SqlServer2005里运行exe
    PBCS项目总结
    一条SQL删除所有表中数据
    SQL Server压缩Log文件的方法总结
    最近打算学习的一些东西
  • 原文地址:https://www.cnblogs.com/zhangzhen894095789/p/6848145.html
Copyright © 2011-2022 走看看