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;
 } } } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM