我在Spring Security 实战干货:内置 Filter 全解析对Spring Security的内置过滤器进行了罗列,可是Spring Security真正的过滤器体系才是咱们了解它是如何进行"认证"、“受权”、“防止利用漏洞”的关键。html
这里咱们以Servlet Web为讨论目标,Reactive Web暂不讨论。咱们先来看下最基础的Servlet体系,在Servlet体系中客户端发起一个请求过程是通过0到N个Filter
而后交给Servlet
处理。java
Filter
不但能够修改HttpServletRequest
和HttpServletResponse
,可让咱们在请求响应的先后作一些事情,甚至能够终止过滤器链FilterChain
的传递。spring
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { // 请求被servlet 处理前 if(condition){ // 根据条件来进入下一个过滤器 chain.doFilter(request, response); } // 请求被执行完毕后处理一些事情 }
因为Filter
仅影响下游Filters和Servlet,所以每一个Filter
调用的顺序很是重要。Spring Security正是根据这个个特性来实现一系列的安全功能。接下来咱们来看看它们是如何结合的。安全
在该系列的文章开篇我对Spring Security和Shiro进行了简单的对比。Spring Security利用了Spring IOC和AOP的特性而没法脱离Spring独立存在,而Apache Shiro能够独立存在。因此今天咱们要一探究竟,看看他们是如何结合的。微信
Spring结合Servlet Filter天然是要为Servlet Filter注入Spring Bean的特性,因此就搞出了一个抽象Filter Bean,这个抽象过滤器GenericFilterBean
并非在Spring Security下,而是Spring Web体系中,类图以下:学习
从类图上看Filter
接口已经被注入了多个Spring Bean的特性,归入了Spring Bean生命周期,使得Spring IoC容器可以充分的管理Filter
。url
咱们但愿Servlet可以按照它本身的标准来注册到过滤器链中工做,可是同时也但愿它可以被Spring IoC管理,因此Spring提供了一个GenericFilterBean
的实现DelegatingFilterProxy
。咱们能够将原生的Servlet Filter或者Spring Bean Filter委托给DelegatingFilterProxy
,而后在结合到Servlet FilterChain中。spa
针对不一样符合Ant Pattern的请求可能会走不一样的过滤器链,好比登陆会去验证,而后返回登陆结果;管理后台的接口走后台的安全逻辑,应用客户端的接口走客户端的安全逻辑。Spring Security提供了一个SecurityFilterChain
接口来知足被匹配HttpServletRequest
走特定的过滤器链的需求。3d
public interface SecurityFilterChain { // 判断请求 是否符合该过滤器链的要求 boolean matches(HttpServletRequest request); // 对应的过滤器链 List<Filter> getFilters(); }
不一样的SecurityFilterChain
应该是互斥并且平等的,它们之间不该该是上下游关系。code
如上图请求被匹配到不一样的SecurityFilterChain
而后在执行剩余的过滤器链。它们通过SecurityFilterChain
的总流程是类似的,并且有些时候特定的一些SecurityFilterChain
也须要被集中管理来实现特定一揽子的请求的过滤逻辑。因此就有了另一个GenericFilterBean
实现来作这个事情,它就是FilterChainProxy
。它的做用就是拦截符合条件的请求,而后根据请求筛选出符合要求的SecurityFilterChain
,而后链式的执行这些Filter,最后继续执行剩下的FilterChain
。
扩展阅读: Spring Security 过滤器链
结合上面,最终上述这些概念的关系完全搞清楚了,搞清楚过滤器的运做模式对于学习和使用Spring Security相当重要。
多多关注微信公众号:码农小胖哥 获取更多的技术干货。六月打榜结果已出请中奖的同窗速度联系我领取,另外七月打榜前三会送上热门技术正版实体书籍, 打榜的要求只有一个关注、转发、再看、点赞均可以增长本身的排名。
关注公众号:Felordcn 获取更多资讯