前言
上一篇博文主要讲了SpringShiroFilter的初始化过程,这篇文章主要解析SpringShir Filter在处理请求时做了些什么。
概述
SpringShiroFilter处理请求的中心思想是获取某个请求对应的shiroFilterChain,并添加到javaEE规范的FilterChian中,从而使得配置的过滤器能够被调用,具体怎么做到的,我们看正文的解析
正文
首先,还是先给出SpringShiroFilter的继承结构,如下图:
既然是过滤器,那么一定是有一个doFilter方法供Servlet容器调用(如tomcat),,SpringShiroFilter中没有这个方法,我们一层一层的的往上找,直到在OncePerRequestFilter中找到该方法
现在完成了最重要的一步,将FilterChain进行了代理,下面一路回退,回退到最开始的executerChain()方法,在得到这个代理过滤链后直接调用doFilter方法触发我们配置的具体过滤器。
自此,SpringShiroFilter完成了他的使命--通过组合的方式将shiroFilterChian添加到FilterChian中,所以一旦经过经过了这个过滤器,那么我们的filterChain可就不是原来的filterChain了,shiro通过组合的设计模式对doFilter()方法的具体实现修改了,并且丝毫不影响客户端调用代码,甚至都感知不到原来这个FilterChain已经被shiro"无耻"的篡改了。
本篇文章讲了SpringShiroFilter将ShiroFilterChain加载到FilterChain的实现原理,下一篇文章将以PermissionsAuthorizationFilter为例讲解具体的ShiroFilter过滤的步骤。