1. public class LoginHandlerInterceptor extends HandlerInterceptorAdapter{
  2.  
  3. @Override
  4. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  5. // TODO Auto-generated method stub
  6. String path = request.getServletPath();
  7. if(path.equals("/"))
  8. return true;
  9. if(path.matches(Const.NO_INTERCEPTOR_PATH)){
  1.          /**
  2. *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)).*";
  1.           //不对匹配该值的访问路径拦截(正则)*/
                return true;
            }
  2.       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;
  1.           
  2. List<Menu> menuList = (List)session.getAttribute(Const.SESSION_allmenuList); //获取菜单列表
  3. path = path.substring(1, path.length());
  4. for(int i=0;i<menuList.size();i++){
  5. for(int j=0;j<menuList.get(i).getSubMenu().size();j++){
  6. if(menuList.get(i).getSubMenu().get(j).getMENU_URL().split(".do")[0].equals(path.split(".do")[0])){
  7. if(!menuList.get(i).getSubMenu().get(j).isHasMenu()){ //判断有无此菜单权限
  8. response.sendRedirect(request.getContextPath() + Const.LOGIN);
  9. return false;
  10. }else{ //按钮判断
  11. Map<String, String> map = (Map<String, String>)session.getAttribute(Const.SESSION_QX);//按钮权限
  12. map.remove("add");
  13. map.remove("del");
  14. map.remove("edit");
  15. map.remove("cha");
  16. String MENU_ID = menuList.get(i).getSubMenu().get(j).getMENU_ID();
  17. String USERNAME = session.getAttribute(Const.SESSION_USERNAME).toString(); //获取当前登录者loginname
  18. Boolean isAdmin = "admin".equals(USERNAME);
  19. map.put("add", (RightsHelper.testRights(map.get("adds"), MENU_ID)) || isAdmin?"1":"0");
  20. map.put("del", RightsHelper.testRights(map.get("dels"), MENU_ID) || isAdmin?"1":"0");
  21. map.put("edit", RightsHelper.testRights(map.get("edits"), MENU_ID) || isAdmin?"1":"0");
  22. map.put("cha", RightsHelper.testRights(map.get("chas"), MENU_ID) || isAdmin?"1":"0");
  23. session.removeAttribute(Const.SESSION_QX);
  24. session.setAttribute(Const.SESSION_QX, map); //重新分配按钮权限
  25. }
  26. }
  27. }
  28. }
  29. return true;
  30. }else{
  31. //登陆过滤
  32. response.sendRedirect(request.getContextPath() + Const.LOGIN);
  33. return false;
  34. //return true;
  35. }
  36. }
  37. }
  38. }

springmvc 登陆拦截器 配合shiro框架使用的更多相关文章

  1. JAVAEE——struts2_04:自定义拦截器、struts2标签、登陆功能和校验登陆拦截器的实现

    一.自定义拦截器 1.架构 2.拦截器创建 //拦截器:第一种创建方式 //拦截器生命周期:随项目的启动而创建,随项目关闭而销毁 public class MyInterceptor implemen ...

  2. SpringMVC:拦截器

    SpringMVC:拦截器   概述 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.开发者可以自己定义一些拦截器来实现特定的功能. 过 ...

  3. springmvc的拦截器

    什么是拦截器                                                         java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...

  4. SpringMVC经典系列-14自己定义SpringMVC的拦截器---【LinusZhu】

    注意:此文章是个人原创.希望有转载须要的朋友们标明文章出处.假设各位朋友们认为写的还好,就给个赞哈.你的鼓舞是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系linusz ...

  5. SpringMVC—Struts2拦截器学习网址整理

    引自:http://blog.csdn.net/wp1603710463/article/details/49982683 SpringMVC—Struts2拦截器学习网址整理 最近项目中遇到权限相关 ...

  6. 转 :关于springmvc使用拦截器

    原博客: http://elim.iteye.com/blog/1750680 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的 ...

  7. 初学springMVC的拦截器

    springMvc拦截器的执行顺序! 拦截器的各个方法的作用: /** * 登录验证拦截器 */      public class Intercepter implements HandlerInt ...

  8. springMVC配置拦截器、过滤器、前端控制器时遇到的问题总结

    1.业务场景:使用vuejs+springMVC+spring框架搭建一个mis系统,集成SSO单点登录: 2.遇到问题:使用interceptor拦截器配置SSO单点登录,直接敲域名,或者ip+端口 ...

  9. 【Java EE 学习 70 上】【数据采集系统第二天】【数据加密处理】【登陆验证】【登陆拦截器】【新建调查】【查询调查】

    一.数据加密处理 这里使用MD5加密处理,使用java中自带加密工具类MessageDigest. 该类有一个方法digest,该方法输入参数是一个字符串返回值是一个长度为16的字节数组.最关键的是需 ...

随机推荐

  1. The server of Nginx(一)——Nginx基础及静态网站的构建

    一.Nginx介绍 火了半边天的Nginx和Apache一样也是Web服务器,专为性能优化而开发,也可以像Squid一样做反向代理,或者邮件代理等许多用途,并有windows的移植版,其最知名的优点是 ...

  2. sqlalchemy orm数据类型验证方法比较

    1.在定义ORM模型时校验 sqlalchemy提供validates函数支持对字段的校验 from sqlalchemy.orm import validates class EmailAddres ...

  3. centos6+如何对外开放80,3306端口号或者其他端口号

    1.查看防火墙对外开放了哪些端口 [root@hadoop110 ~]# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt sour ...

  4. HDU - 1085 母函数

    年轻人的第一道母函数入门题 #include<bits/stdc++.h> using namespace std; const int maxn = 1000+2000+5000+1; ...

  5. A - TOYS(POJ - 2318) 计算几何的一道基础题

    Calculate the number of toys that land in each bin of a partitioned toy box. 计算每一个玩具箱里面玩具的数量 Mom and ...

  6. poj1002 字典树+map+查询单词出现次数

    487-3279 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 309235   Accepted: 55223 Descr ...

  7. SQL Server Reporting Service(SSRS) 第七篇 常见错误汇总

    1. The current action cannot be completed. The user data source credentials do not meet the requirem ...

  8. java连接redis使用jedis带密码

    一.引入jedis的Maven配置文件 <!-- redis连接客户端jedis --> <dependency> <groupId>redis.clients&l ...

  9. 常用Redis命令

    在 Windows 下配置 Redis 集群 在 Windows 下配置多个 Redis(简化配置) MicrosoftArchive/redis 官方Redis集群搭建文档 Redis命令 Cent ...

  10. 022-pinyin4j工具类模板

    模板一 package ${enclosing_package}; import java.util.Arrays; import net.sourceforge.pinyin4j.PinyinHel ...