Spring Security 过滤器链解析
Spring Security 的所有逻辑都是基于过滤器链的, 这里简单介绍一下 Spring Security 的过滤器链。
1. ApplicationFilterChain
ApplicationFilterChain实现了FilterChain,由 Tomcat 构建此过滤器链。- 由
ApplicationFilterFactory.createFilterChain(request, wrapper, servlet);创建。 - 过滤器列表示例:
[... DelegatingFilterProxy]。
2. DelegatingFilterProxy
DelegatingFilterProxy是一个过滤器,间接注册在ApplicationFilterChain中。- 它是
WebMvcSecurityConfiguration.CompositeFilterChainProxy的装饰器。
3. CompositeFilterChainProxy
CompositeFilterChainProxy是 Security 真实的过滤器链。- 它是一个过滤器链代理,里面有
List<Filter> doFilterDelegate作为核心属性。
4. doFilterDelegate 过滤器链
doFilterDelegate会构建一个VirtualFilterChain过滤器链, 其中包含[HandlerMappingIntrospector.createCacheFilter, FilterChainProxy]。
5. FilterChainProxy
FilterChainProxy是 Spring Security 提供的过滤器链代理。- 其中包含
List<SecurityFilterChain> filterChains,管理不同请求的不同过滤器链。 - 通过url路径匹配具体的
SecurityFilterChain。
6. SecurityFilterChain
- 其实现类
DefaultSecurityFilterChain,是具体的过滤器链对象。 - 其中包含构建
FilterChain的过滤器和匹配规则。 - 主要属性:
RequestMatcher requestMatcherList<Filter> filters
FilterChainProxy通过requestMatcher匹配filters。
7. VirtualFilterChain
VirtualFilterChain是FilterChainProxy的一个内部类。- 它是
FilterChain的具体实现。 - 在第 2 步获取到过滤器后,会构建
VirtualFilterChain, 这个链是真正的 Spring Security 过滤器链。
具体参考官网的这个图片: 