springsecurity过滤器链
时间: 2023-04-26 18:06:40 浏览: 117
Spring Security 过滤器链是一系列过滤器,用于处理 Web 应用程序的安全性。它包括了多个过滤器,每个过滤器都有不同的功能,例如身份验证、授权、会话管理等。这些过滤器按照一定的顺序依次执行,以确保应用程序的安全性。通过配置 Spring Security 过滤器链,可以实现对 Web 应用程序的安全性进行有效的管理和控制。
相关问题
springsecurity 过滤器链
Spring Security 过滤器链是一系列过滤器的集合,用于处理 Web 应用程序的安全性。这些过滤器按照特定的顺序执行,以确保安全性的正确实施。过滤器链的顺序是非常重要的,因为它们的执行顺序会影响到安全性的实现。Spring Security 过滤器链包括了许多不同的过滤器,例如身份验证过滤器、授权过滤器、会话管理过滤器等等。这些过滤器可以根据需要进行配置和自定义,以满足不同的安全需求。
springsecurity过滤器链中过滤器顺序
### 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(); // 开启表单登陆功能
}
}
```
阅读全文
相关推荐















