请求提供Spring Security过滤器链的完整过滤器列表
Spring Security过滤器链完整过滤器列表
嗨,我来给你梳理一下Spring Security默认过滤器链里的核心过滤器,它们是按固定顺序执行的,每个过滤器都承担着特定的安全职责:
- WebAsyncManagerIntegrationFilter:集成Spring的
WebAsyncManager,确保异步请求线程也能访问到当前的SecurityContext,解决异步场景下的安全上下文传递问题。 - SecurityContextPersistenceFilter:负责SecurityContext的持久化与恢复——请求开始时从Session或其他存储中加载SecurityContext,请求结束后将更新后的SecurityContext保存回去,是整个安全上下文管理的基础。
- HeaderWriterFilter:自动向响应中添加安全相关的HTTP头,比如
X-Content-Type-Options、X-Frame-Options、Content-Security-Policy等,提升应用的安全性。 - CsrfFilter:处理CSRF防护逻辑,验证请求中的CSRF令牌是否有效,默认对POST/PUT/DELETE等修改型请求生效,可通过配置禁用。
- LogoutFilter:监听注销请求(默认匹配
/logout路径),处理用户注销逻辑:清理SecurityContext、销毁Session、触发注销事件等。 - UsernamePasswordAuthenticationFilter:处理表单登录的POST请求(默认匹配
/login路径),提取请求中的用户名和密码,调用AuthenticationManager进行认证。 - DefaultLoginPageGeneratingFilter:当你没有自定义登录页面时,自动生成一个默认的登录表单页面,方便快速开发。
- DefaultLogoutPageGeneratingFilter:同理,生成默认的注销确认页面,无需手动编写。
- BasicAuthenticationFilter:处理HTTP Basic认证,从请求头的
Authorization字段中提取用户名和密码,完成认证流程,常用于API场景。 - RequestCacheAwareFilter:恢复被认证拦截前的原始请求——比如用户访问需要权限的页面时被跳转到登录页,登录成功后会通过这个过滤器重定向回原请求页面。
- SecurityContextHolderAwareRequestFilter:对
HttpServletRequest进行包装,让它能便捷地获取SecurityContext中的信息,比如通过getUserPrincipal()获取当前登录用户。 - AnonymousAuthenticationFilter:如果当前请求没有任何认证信息,会自动创建一个匿名用户(
AnonymousAuthenticationToken)并放入SecurityContext,确保后续过滤器能正常处理未登录请求。 - SessionManagementFilter:处理会话管理相关逻辑,包括会话固定保护(防止会话劫持)、并发会话控制(限制同一用户同时登录的数量)、会话过期处理等。
- ExceptionTranslationFilter:捕获过滤器链中抛出的Security异常(比如
AccessDeniedException、AuthenticationException),将其转换为对应的HTTP响应(如401未授权、403禁止访问),同时处理重定向到登录页的逻辑。 - FilterSecurityInterceptor:过滤器链的最后一环,负责基于URL的权限控制——根据配置的安全规则,判断当前用户是否拥有访问目标资源的权限,若没有则抛出相应异常。
需要注意的是,你可以通过Spring Security的配置(比如HttpSecurity)来添加自定义过滤器、移除默认过滤器,或者调整过滤器的执行顺序,以满足特定的业务需求。
内容的提问来源于stack exchange,提问作者user13870828
相关产品推荐
相关产品推荐

