shiro拦截器处理链执行顺序

摘要:
shiro拦截器处理链执行顺序A1:根据到spring容器查找实现bean,并根据配置把相应的url请求委托给它去执行。A31:doFilterInternal()方法,OncePerRequestFilter的抽象方法,会去子类中寻找它的实现,最终在子类AbstractShiroFilter找到实现并执行。B11:AbstractShiroFilter执行doFilterInternal()方法后会调用excuteChain()里面的chain.doFilter()B12:AbstractShiroFilter方法中的chain.doFilter()会调用它的doFilter()。

shiro拦截器处理链执行顺序

shiro拦截器处理链执行顺序第1张

A1:根据<filter-name>到spring容器查找实现bean,并根据配置把相应的url请求委托给它去执行。

A21:SpringShiroFilter是ShiroFilterFactoryBean的内部类,会执行doFilter()方法。A21没有重写父类的doFilter方法,因此会去寻找父类中的实现,最终调用OncePerRequestFilter(A23)的该方法。

A23:执行doFilter方法,调用doFilterInternal()方法。

A31:doFilterInternal()方法,OncePerRequestFilter的抽象方法,会去子类中寻找它的实现,最终在子类AbstractShiroFilter(A32)找到实现并执行。

B11:AbstractShiroFilter执行doFilterInternal()方法后会调用excuteChain()里面的chain.doFilter()

B12:AbstractShiroFilter(B11)方法中的chain.doFilter()会调用它的(B12)doFilter()。它没有重写父类的doFilter方法,因此会去寻找父类中的实现,最终调用OncePerRequestFilter(B18)的该方法。这个B12可以是表单拦截器,也可以是其它拦截器实现。

B21:doFilterInternal()方法,OncePerRequestFilter的抽象方法,会去子类中寻找它的实现,最终在子类AdviceFilter(B22)找到实现并执行。

B31:AdviceFilter执行doFilterInternal()方法后调用,会调用preHandle()方法,该方法在子类PathMatchingFilter(B32)中实现。

B33:PathMatchingFilter执行preHandle()时调用了onpreHandle()方法。

onpreHandle随后会继续调用其它方法.......... 最终调用onAccessDenied方法,该方法在子类B99中实现了

onPreHandle主要流程:

1、首先判断是否已经登录过了,如果已经登录过了继续拦截器链即可;

2、如果没有登录,看看是否是登录请求,如果是get方法的登录页面请求,则继续拦截器链(到请求页面),否则如果是get方法的其他页面请求则保存当前请求并重定向到登录页面;

3、如果是post方法的登录页面表单提交请求,则收集用户名/密码登录即可,如果失败了保存错误消息到“shiroLoginFailure”并返回到登录页面;

4、如果登录成功了,且之前有保存的请求,则重定向到之前的这个请求,否则到默认的成功页面。

免责声明:文章转载自《shiro拦截器处理链执行顺序》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C 面向对象编程 --- 一模块的串口协议解析第二百一十三节,jQuery EasyUI,NumberBox(数值输入框)组件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

shiro的单机版 和 集群版

在我们的开发当中 我们一般权限都是个 比较繁琐 但又必不可少的 一部分 【不管我们的 数据库设计 还是我们采用何种技术 我们的权限库表 大多都是大同小异 业务逻辑也是如此】 在我们不使用任何框架的时候 我们也是可以做到 但是细节过于麻烦 在很多时候 都是重复造轮子的过程 所以出现了 很多开源比较休息的额权限框架如:shiro Spring security...

21.Shiro在springboot与vue前后端分离项目里的session管理

1.前言 当决定前端与后端代码分开部署时,发现shiro自带的session不起作用了。 然后通过对请求head的分析,然后在网上查找一部分解决方案。 最终就是,登录成功之后,前端接收到后端传回来的sessionId,存入cookie当中。 之后,前端向后端发送请求时,请求Head中都会带上这个sessionid。 后端代码通过对这个sessionid的解...

spring boot整合shiro

安全框架Shiro和Spring Security比较,本文主要围绕Shiro进行学习 一 Shiro 是一个强大而灵活的开源安全框架,能够清晰的处理认证 授权 管理会话以及,密码加密   01 .认证与授权相关概念     安全实体:  系统需要保护的具体对象数据     权限: 系统相关的功能操作,例如基本的CRUD     Authenticatio...

shiro认证授权

    一、shiro基础概念 Authentication:身份认证 / 登录,验证用户是不是拥有相应的身份; Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限; Session Manager:会话管...

使用shiro路径通配符配置访问权限

简述: shiro框架通过拦截功能来实现对用户访问权限的控制和拦截,shiro里面支持Ant风格的通配符。 ?:匹配任意的一个字符,例如:"/admin?"可以匹配“/admin1”,"/admin2"。 *:匹配一个或者多个任意的字符。 **:匹配零个或者多个目录。 设置路径通配符: [main] #如果现在认证失败,则跳转到loginUrl配置的路径...

shiro-会话管理

  shiro提供了完整的企业级会话还礼功能,不依赖与底层容器(如web容器Tomcat),不管JavaSE还是JavaEE环境都可以使用,提供了会话管理、会话事件监听、会话存储/持久化、容器无关的集群、失效/过期支持、对web的透明支持,SSO单点登录的支持等特性。 一. 会话相关的API:org.apache.shiro.session.Session...