过滤器做为 Spring Security 的重中之重,咱们须要了解其中的机制。这样咱们才能根据业务需求的变化进行定制。今天来探讨一下 Spring Security 中的过滤器链机制html
客户端(APP 和后台管理客户端)向应用程序发送请求,而后应用根据请求的 URI 的路径来肯定该请求的过滤器链(Filter)以及最终的具体 Servlet 控制器(Controller)。spring
从上图咱们能够看出 Spring Security 以一个单 Filter(FilterChainProxy) 存在于整个过滤器链中,而这个 FilterChainProxy
实际内部代理着众多的 Spring Security Filter 。这简直就是套娃啊!学习
再多说一点 Filter 们的初始化过程,首先 Filter 们按照必定的顺序被 SecurityBuilder
的实现来组装为 SecurityFilterChain
,而后经过 WebSecurity
注入到 FilterChainProxy
中去,接着 FilterChainProxy
又在 WebSecurityConfiguration
中以 springSecurityFilterChain
的名称注册为 Spring Bean 。实际上还有一个隐藏层 DelegatingFilterProxy
代理了 springSecurityFilterChain
注入到最后整个 Servlet 过滤器链中。 简单画了个图;ui
事实上 Spring Security 的内置 Filter 对于 Spring IoC 容器来讲都是不可见的。
Spring Security 容许有多 条过滤器链并行,Spring Security 的 FilterChainProxy
能够代理多条过滤器链并根据不一样的 URI 匹配策略进行分发。可是每一个请求每次只能被分发到一条过滤器链。以下图所示:spa
关于 Filter 的其它细节能够经过 相关文章 了解。3d
实际每条过滤链 就是一个
SecurityFilterChain
今天咱们经过对 Spring Security 中 过滤器链机制,对于深刻学习 Spring Security 有着相当重要的意义。 有什么问题和心得请留言反馈。代理