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方法
在这里插入图片描述
这样一个流程就结束了…

世界上所有的不公平都是由于当事人能力不足造成的.
原文地址:https://www.cnblogs.com/javayida/p/13346786.html