Spring Security中 默认过滤器链

Spring Security中,默认的过滤器链包含了多个过滤器,用于处理身份验证、授权和其他安全相关的任务。以下是Spring Security中常见的一些默认过滤器:

1. ChannelProcessingFilter :处理HTTP和HTTPS之间的通道安全。

2. SecurityContextPersistenceFilter :负责在请求之间持久化 SecurityContext ,以便在处理后续请求时可以访问用户的安全上下文。

3. ConcurrentSessionFilter :处理并发会话控制,以确保用户在同一时间只能拥有一个有效的会话。

4. LogoutFilter :处理登出请求,清除用户的身份验证信息。

5. UsernamePasswordAuthenticationFilter :处理基于用户名和密码的身份验证请求。

6. DefaultLoginPageGeneratingFilter :生成默认的登录页面。

7. DefaultLogoutPageGeneratingFilter :生成默认的登出页面。

8. BasicAuthenticationFilter :处理基本身份验证请求。

9. RequestCacheAwareFilter :处理请求缓存,以便在重定向后恢复原始请求。

10. SecurityContextHolderAwareRequestFilter :将 SecurityContextHolder 设置为 SecurityContext 的请求。

11. AnonymousAuthenticationFilter :处理匿名用户的身份验证。

12. SessionManagementFilter :处理会话管理,例如会话过期和并发控制。

13. ExceptionTranslationFilter :处理异常,将安全异常转换为适当的HTTP响应。

14. FilterSecurityInterceptor :负责对请求进行授权,根据用户的权限决定是否允许访问。 这只是一些常见的默认过滤器,实际上,Spring Security还提供了其他过滤器,可以根据需求进行自定义和配置。默认过滤器链的具体配置和顺序可以通过Spring Security的配置进行调整和扩展。

这个默认的过滤器链顺序是经过精心设计的,以确保在处理身份验证、授权和其他安全相关任务时的正确顺序和逻辑。每个过滤器都有其特定的功能和责任。 如果想改变默认的过滤器执行顺序,可以通过Spring Security的配置进行调整。可以使用 HttpSecurityaddFilterBeforeaddFilterAfter 方法来添加自定义过滤器,并指定其在默认过滤器链中的位置。这样可以影响过滤器的执行顺序。 改变默认过滤器的执行顺序可能会影响登录认证流程,特别是涉及到身份验证和授权的过滤器。因此,在调整过滤器的执行顺序时,需要仔细考虑其影响,并确保新的顺序符合需求和安全要求。

### Spring Security 过滤器中的各个过滤器执行顺序 在Spring Security框架内,多个过滤器按照预定义的顺序排列并依次调用以完成一系列的安全控制任务。这些过滤器被设计成能够处理诸如身份验证、访问权限检查等功能,并且每一个都有独特的角色。 #### 默认情况下,Spring Security过滤器通常遵循如下顺序: 1. **WebAsyncManagerIntegrationFilter** 此过滤器用于支持异步请求下的安全上下文传播[^2]。 2. **SecurityContextPersistenceFilter** 负责保存和恢复`SecurityContextHolder`中的`SecurityContext`对象,在每次HTTP请求开始时初始化安全上下文,并在结束时清理它。 3. **HeaderWriterFilter** 添加必要的响应头来增强安全性,比如防止点击劫持(X-Frame-Options),设置缓存策略(Cache-Control)等。 4. **CsrfFilter** 实现跨站请求伪造保护机制,通过比较客户端提交的CSRF令牌与服务器端存储的一致性来进行防护。 5. **LogoutFilter** 处理用户的登出逻辑,当接收到匹配路径的POST请求时触发注销过程。 6. **UsernamePasswordAuthenticationFilter** 验证基于用户名/密码的身份凭证,默认绑定到/login URL上。 7. **DefaultLoginPageGeneratingFilter & DefaultLogoutPageGeneratingFilter** 当未提供自定义登录页面或退出页面时自动创建默认版本。 8. **ConcurrentSessionFilter** 控制同一用户的同时在线会话数量,超出限额则拒绝新连接。 9. **OAuth2LoginAuthenticationFilter, Saml2WebSsoAuthenticationFilter**, etc. 支持多种第三方认证方式如OAuth2/SAML SSO协议。 10. **RequestCacheAwareFilter** 如果之前存在重定向,则尝试从缓存中检索原始请求信息以便继续处理。 11. **SecurityContextHolderAwareRequestWrapperFilter** 将当前线程关联的安全上下文封装进HttpServletRequest对象中供后续使用。 12. **RememberMeAuthenticationFilter** 对于启用了记住我的服务,此过滤器会在成功登录后向浏览器发送持久化Cookie。 13. **AnonymousAuthenticationFilter** 若无其他形式的有效认证,则为匿名用户提供临时身份标识。 14. **SessionManagementFilter** 管理会话固定攻击风险以及强制单一会话等问题。 15. **ExceptionTranslationFilter** 捕获所有抛出自定义异常(如AccessDeniedException),并将它们转换成适当类型的HTTP错误状态码返回给客户端;同时也会处理来自下游过滤器未能解决的身份验证需求[^3]。 16. **FilterSecurityInterceptor (FSI)** 作为最后一个核心组件,负责实际执行资源级别的授权决策,即判断已认证主体是否有权访问指定URL模式所代表的目标资源。 以上就是典型的Spring Security过滤器条路及其工作次序描述。值得注意的是,开发者可以根据项目具体需求调整这个列表内的成员构成及位置关系,甚至添加额外定制化的过滤单元。 为了配置上述提到的各种过滤器,可以利用Java Config 或 XML命名空间的方式进行声明式编程。对于大多数现代应用程序而言,推荐采用前者——借助@EnableWebSecurity注解配合SecurityConfig类内部的方法注入实现灵活而强大的安全设定。 ```java @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") // 定义受保护资源规则 .anyRequest().authenticated() // 其他任何请求都需要经过身份验证 .and() .formLogin(); // 开启表单登陆功能 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值