核心安全过滤器顺序和作用表
以下是 Spring Security 6 中主要过滤器的详细表格:
| 顺序 | 过滤器名称 | 类名 | 作用 | 是否默认启用 | 配置方式 |
|---|---|---|---|---|---|
| -150 | WebAsyncManagerIntegrationFilter | WebAsyncManagerIntegrationFilter |
集成异步请求处理与SecurityContext | 是 | 自动 |
| -100 | SecurityContextHolderFilter | SecurityContextHolderFilter |
安全上下文持久化 (替代旧版SecurityContextPersistenceFilter) | 是 | 自动 |
| -90 | HeaderWriterFilter | HeaderWriterFilter |
添加安全HTTP头 | 是 | 自动 |
| -80 | CorsFilter | CorsFilter |
处理跨域请求 | 可选 | .cors() |
| -70 | CsrfFilter | CsrfFilter |
防止CSRF攻击 | 是 (REST API建议禁用) | .csrf() |
| -60 | LogoutFilter | LogoutFilter |
处理用户登出 | 是 | .logout() |
| -55 | OAuth2AuthorizationRequestRedirectFilter | OAuth2AuthorizationRequestRedirectFilter |
OAuth2授权重定向 | 可选 | .oauth2Login() |
| -50 | UsernamePasswordAuthenticationFilter | UsernamePasswordAuthenticationFilter |
表单登录认证 | 可选 | .formLogin() |
| -45 | DefaultLoginPageGeneratingFilter | DefaultLoginPageGeneratingFilter |
生成默认登录页 | 可选 | 自动(当使用表单登录且未指定登录页时) |
| -40 | DefaultLogoutPageGeneratingFilter | DefaultLogoutPageGeneratingFilter |
生成默认登出页 | 可选 | 自动 |
| -35 | BearerTokenAuthenticationFilter | BearerTokenAuthenticationFilter |
JWT/Bearer Token认证 | 可选 | .oauth2ResourceServer() |
| -30 | BasicAuthenticationFilter | BasicAuthenticationFilter |
HTTP Basic认证 | 可选 | .httpBasic() |
| -25 | RequestCacheAwareFilter | RequestCacheAwareFilter |
恢复缓存的请求 | 是 | 自动 |
| -20 | SecurityContextHolderAwareRequestFilter | SecurityContextHolderAwareRequestFilter |
包装HttpServletRequest添加安全方法 | 是 | 自动 |
| -15 | AnonymousAuthenticationFilter | AnonymousAuthenticationFilter |
处理匿名用户 | 是 | 自动 |
| -10 | SessionManagementFilter | SessionManagementFilter |
会话管理 | 是 | .sessionManagement() |
| -5 | ExceptionTranslationFilter | ExceptionTranslationFilter |
异常转换 | 是 | 自动 |
| 0 | AuthorizationFilter | AuthorizationFilter |
授权决策 (替代FilterSecurityInterceptor) | 是 | .authorizeHttpRequests() |
OAuth2/JWT 相关过滤器
| 顺序 | 过滤器名称 | 类名 | 作用 | 是否默认启用 | 配置方式 |
|---|---|---|---|---|---|
| -65 | Saml2WebSsoAuthenticationRequestFilter | Saml2WebSsoAuthenticationRequestFilter |
SAML2认证请求 | 可选 | .saml2Login() |
| -52 | OAuth2LoginAuthenticationFilter | OAuth2LoginAuthenticationFilter |
OAuth2登录回调处理 | 可选 | .oauth2Login() |
| -48 | Saml2WebSsoAuthenticationFilter | Saml2WebSsoAuthenticationFilter |
SAML2认证响应处理 | 可选 | .saml2Login() |
其他常用过滤器
| 顺序 | 过滤器名称 | 类名 | 作用 | 是否默认启用 | 配置方式 |
|---|---|---|---|---|---|
| -85 | X509AuthenticationFilter | X509AuthenticationFilter |
X.509客户端证书认证 | 可选 | .x509() |
| -75 | LogoutHandler | LogoutHandler |
登出处理器 | 是 | .logout() |
| -57 | J2eePreAuthenticatedProcessingFilter | J2eePreAuthenticatedProcessingFilter |
J2EE预认证处理 | 可选 | .jee() |
| -42 | RequestHeaderAuthenticationFilter | RequestHeaderAuthenticationFilter |
请求头认证 | 可选 | 自定义 |
过滤器配置示例对应表
1. REST API (JWT 认证) 配置
配置: http.csrf().disable() + .oauth2ResourceServer().jwt()
会启用的主要过滤器:
1. SecurityContextHolderFilter (-100)
2. HeaderWriterFilter (-90)
3. CorsFilter (-80) [如果配置了cors]
4. LogoutFilter (-60)
5. BearerTokenAuthenticationFilter (-35) [JWT认证]
6. RequestCacheAwareFilter (-25)
7. SecurityContextHolderAwareRequestFilter (-20)
8. AnonymousAuthenticationFilter (-15)
9. SessionManagementFilter (-10)
10. ExceptionTranslationFilter (-5)
11. AuthorizationFilter (0) [授权检查]
2. 传统Web应用 (表单登录) 配置
配置: .formLogin() + .logout() + .csrf()
会启用的主要过滤器:
1. SecurityContextHolderFilter (-100)
2. HeaderWriterFilter (-90)
3. CorsFilter (-80) [如果配置了cors]
4. CsrfFilter (-70)
5. LogoutFilter (-60)
6. UsernamePasswordAuthenticationFilter (-50) [表单认证]
7. DefaultLoginPageGeneratingFilter (-45) [如果未指定登录页]
8. DefaultLogoutPageGeneratingFilter (-40)
9. RequestCacheAwareFilter (-25)
10. SecurityContextHolderAwareRequestFilter (-20)
11. AnonymousAuthenticationFilter (-15)
12. SessionManagementFilter (-10)
13. ExceptionTranslationFilter (-5)
14. AuthorizationFilter (0) [授权检查]
3. OAuth2 登录配置
配置: .oauth2Login() + .csrf()
会启用的主要过滤器:
1. SecurityContextHolderFilter (-100)
2. HeaderWriterFilter (-90)
3. CorsFilter (-80) [如果配置了cors]
4. CsrfFilter (-70)
5. LogoutFilter (-60)
6. OAuth2AuthorizationRequestRedirectFilter (-55) [OAuth2重定向]
7. OAuth2LoginAuthenticationFilter (-52) [OAuth2回调处理]
8. RequestCacheAwareFilter (-25)
9. SecurityContextHolderAwareRequestFilter (-20)
10. AnonymousAuthenticationFilter (-15)
11. SessionManagementFilter (-10)
12. ExceptionTranslationFilter (-5)
13. AuthorizationFilter (0) [授权检查]
过滤器执行流程表
| 阶段 | 过滤器类型 | 关键功能 |
|---|---|---|
| 预处理 | SecurityContextHolderFilter | 加载SecurityContext |
| HeaderWriterFilter | 添加安全响应头 | |
| 认证处理 | CsrfFilter | CSRF保护 |
| LogoutFilter | 处理登出 | |
| Authentication Filters | 各种认证方式处理 | |
| 上下文设置 | RequestCacheAwareFilter | 恢复缓存请求 |
| SecurityContextHolderAwareRequestFilter | 包装请求 | |
| AnonymousAuthenticationFilter | 设置匿名身份 | |
| 会话管理 | SessionManagementFilter | 会话控制 |
| 异常处理 | ExceptionTranslationFilter | 安全异常转换 |
| 授权检查 | AuthorizationFilter | 访问控制决策 |
重要变化 (Spring Security 5 → 6)
| 过滤器 | Spring Security 5 | Spring Security 6 | 变化说明 |
|---|---|---|---|
| 授权过滤器 | FilterSecurityInterceptor | AuthorizationFilter | 新API,更简洁 |
| 安全上下文 | SecurityContextPersistenceFilter | SecurityContextHolderFilter | 更清晰的职责分离 |
| CSRF配置 | csrf().disable() | csrf(csrf -> csrf.disable()) | Lambda DSL配置 |
| 授权配置 | .antMatchers() | .requestMatchers() | 新的匹配器API |
自定义过滤器位置参考表
| 插入位置 | 推荐使用的方法 | 示例场景 |
|---|---|---|
| 在CSRF之前 | .addFilterBefore() |
自定义Token验证过滤器 |
| 在认证之后 | .addFilterAfter() |
认证成功后的日志记录 |
| 在授权之前 | .addFilterBefore(AuthorizationFilter) |
动态权限检查 |
| 替代默认过滤器 | .addFilterAt() |
自定义登录处理器 |
调试信息获取
| 方法 | 作用 | 示例 |
|---|---|---|
SecurityFilterChain Bean |
查看配置的过滤器链 | @Autowired SecurityFilterChain |
/actuator/filters |
Actuator端点查看过滤器 | 需要开启Actuator |
日志级别 DEBUG |
查看过滤器执行过程 | logging.level.org.springframework.security=DEBUG |
版权所有 © 【代码谷】 欢迎非商用转载,转载请按下面格式注明出处,商业转载请联系授权,违者必究。(提示:点击下方内容复制出处)
源文: Spring Security 6 常见Filter详解 ,链接:https://www.daimagu.com/article/2601141251597987.html,来源:代码谷
评论