shiro流程分析
文章目录
流程分析
前面讲了shiro的登录和spring整合的使用这里就使用简单的ssm项目来分析shiro的请求大致流程:

请求进来,生成subject然后执行过滤器
前面讲了subject的生成:
subject生成

前面讲的是创建subject对象,现在来讲执行过滤器链;
代理过滤器,生成代理类,先执行shiro的过滤器然后执行Servlet
首先shiro直接将servlet原来过滤器放在一边,执行完shiro自己的过滤器才会执行原来的过滤器:

获取解析器

根据请求进行匹配
对请求的路径进行匹配,找到对应的过滤器,可以重写匹配方法,来实现restful风格的权限验证:

生成代理其实就是ProxiedFilterChain:



执行分析,shiro过滤器执行完,执行servlet过滤器
因为可能需要经过多个过滤器,所以一个一个过滤器执行完,才会执行原来的过滤器:

shiro的过滤器分析
然后就是执行shiro的过滤器了;
默认过滤器


我们先看一下登录,登录是无需拦截的走的是anon;AnonymousFilter过滤器,内部几乎为空:
首先肯定还是走的OncePerRequestFilter的doFilterInternal方法:

注意创建subject的时候也会走这个方法:

AdviceFilter跟拦截器是一样的,preHandle,executeChain,postHandle也是之前执行,执行,之后执行等…登录就直接到了login然后就直接执行了认证方法,在一开始介绍demo的时候说过;

鉴权过滤器
首先看一下uml图:

前面相同,会执行到这里:

然后authc,perms[user:list],就会进到权限验证filter也就是执行isPermitted方法,这个方法原理也在开头讲过了,这时候shiro部分的请求就完成了…:

然后返回会执行到Controller定义的方法
然后返回执行postHandle方法

这样一个流程就结束了…
世界上所有的不公平都是由于当事人能力不足造成的.

浙公网安备 33010602011771号