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

最新文章

  1. LeetCode First Unique Character in a String
  2. mysql 事务隔离级别
  3. 【jmeter】测试报告优化&lt;一&gt;
  4. ionic cordova plugin simple demo
  5. App Extension编程指南(iOS8/OS X v10.10)中文版
  6. web_find和web_reg_find的用法和区别
  7. 修改tomcat的部署名称
  8. mongo db 使用方法
  9. c# winform 让Form去掉系统自带的关闭
  10. codves 3044 矩形面积求并
  11. servlet三大作用域对象
  12. d4-01
  13. Javaweb——————sql常用思维导图
  14. WebGIS中利用AGS JS+eCharts实现一些数据展示的探索
  15. 18 Zabbix 新增map中的icon图标
  16. 使用log4net将C#日志发送到Elasticsearch
  17. 【题解】Luogu P2572 [SCOI2010]序列操作
  18. redis解决商品秒杀问题
  19. Activiti Designer 5.14.1插件安装和使用
  20. [bzoj3123] [SDOI2013]森林 主席树+启发式合并+LCT

热门文章

  1. Python——requests的安装及入门-贴吧爬虫
  2. MATLAB版本(2012b 64bit),在尝试调用svmtrain函数时报错
  3. [转]An STL compliant sorted vector-源码示例
  4. git 设置代理.
  5. DP小小结
  6. ui-grid样式,表格高度自适应行高,没有滚动条,去掉表头
  7. JSTL的核心标签
  8. Oracle 序列(自增ID)
  9. PIXI 根据点走地图(8)
  10. URL篇之URL