我相信有很多同学都对 Spring Security 过滤器链的执行顺序表示疑惑,在框架中 FilterOrderRegistration 担任声明控制过滤器的执行顺序,有时候我们可能会自定义一些过滤器链插入到我们想要的位置,那么这时候就需要明白过滤器链的执行顺序,废话不多说,直接上表格。
过滤器类 | 类的职责 |
---|---|
DisableEncodeUrlFilter | 主要是做URL编码方面的事情,主要功能是防止会话ID泄露和HTTP响应封装 |
ForceEagerSessionCreationFilter | 主要是做会话方面的事情,比如主动创建会话 |
ChannelProcessingFilter | 处理基于HTTP和HTTPS的请求的通道安全性 |
WebAsyncManagerIntegrationFilter | 于集成 Spring MVC 的异步请求处理机制 |
SecurityContextHolderFilter | 主要作用是管理 SecurityContext 的生命周期,确保每个请求都有一个正确的安全上下文。 这个过滤器与 SecurityContextPersistenceFilter 类似,但有一个关键区别:SecurityContextHolderFilter 不会在请求结束时自动保存 SecurityContext。 |
SecurityContextPersistenceFilter | 主要负责在 HTTP 请求的生命周期内管理 SecurityContext 的加载和存储 |
HeaderWriterFilter | 主要负责向HTTP响应中添加安全相关的头部信息。 这些头部信息可以包括例如 Content-Security-Policy、X-Frame-Options、X-Content-Type-Options 等,这些头部有助于减少如点击劫持、内容嗅探等安全威胁。 |
CorsFilter | 用于处理跨源资源共享(CORS)的过滤器。CORS 是一种机制,允许或限制Web应用访问不同源(域、协议或端口)的资源。在现代Web应用中,CORS 是常见的需求,特别是在前后端分离的架构中。 |
CsrfFilter | 用于提供跨站请求伪造(CSRF)保护。CSRF是一种攻击方式,攻击者诱使用户在已经认证的Web应用中执行非预期的操作。 |
LogoutFilter | 负责处理用户的注销(logout)过程。这个过滤器会拦截注销请求,并执行相应的注销逻辑,如清除认证信息、使会话失效等。 |
OAuth2AuthorizationRequestRedirectFilter | 用于处理 OAuth 2.0 授权请求的重定向 |
Saml2WebSsoAuthenticationRequestFilter | 用于处理 SAML 2.0 Web 单点登录(SSO)认证请求 |
X509AuthenticationFilter | 用于实现基于X.509证书的认证。X.509证书是一种标准格式的数字证书,广泛用于安全通信中,特别是在使用SSL/TLS的HTTPS连接中。这种认证机制允许服务器根据客户端提供的数字证书自动验证用户身份,通常用于企业环境或需要高安全性的应用中。 |
AbstractPreAuthenticatedProcessingFilter | 用于处理预认证(pre-authenticated)场景的抽象基类过滤器。预认证指的是在应用程序外部已经完成用户的身份验证,比如通过外部代理、单点登录系统(SSO)或其他方式,而应用程序需要接受这种已有的认证并基于此建立安全上下文。 |
CasAuthenticationFilter | 用于集成 Central Authentication Service (CAS) 单点登录(SSO)机制的过滤器。CAS 是一个广泛使用的Web单点登录协议,允许在多个应用间共享认证状态,即用户在一个应用中登录后,可以无需重新认证即可访问其他集成了CAS的应用。 |
OAuth2LoginAuthenticationFilter | 用于处理 OAuth 2.0 登录,主要做拦截OAuth 2.0登录响应、换取访问令牌、用户信息获取等操作。 |
Saml2WebSsoAuthenticationFilter | 用于处理基于SAML 2.0的Web单点登录(SSO)认证的过滤器。这个过滤器是 Spring Security 的 SAML 2.0 支持的一部分,主要负责处理从SAML 2.0身份提供者(Identity Provider, IdP)的响应。 |
UsernamePasswordAuthenticationFilter | 处理包含用户名和密码的HTTP POST请求,通常用于标准的用户名/密码登录过程。 |
OpenIDAuthenticationFilter | 用于处理基于 OpenID 的认证流程。然而,随着 OpenID Connect 的出现和逐渐取代传统的 OpenID,以及 Spring Security 对 OAuth 2.0 和 OpenID Connect 的支持,OpenIDAuthenticationFilter 的相关功能被淘汰。 |
DefaultLoginPageGeneratingFilter | 用于在没有提供自定义登录页面时自动生成默认的登录页面。这个过滤器主要在开发和调试阶段有用,因为它提供了一个简单、立即可用的登录表单,无需开发者额外编写任何HTML或服务器端代码。 |
DefaultLogoutPageGeneratingFilter | 用于自动生成默认注销(logout)页面 |
ConcurrentSessionFilter | 用于处理并发会话管理的过滤器。它主要用于限制用户的同时登录会话数量,并在达到会话限制时采取相应的行动。这种机制对于增强应用程序的安全性非常有用,尤其是在需要防止同一个账户被多人同时使用的场景中。 |
DigestAuthenticationFilter | 用于处理 HTTP 摘要认证的过滤器。HTTP摘要认证是一种比基本认证(basic authentication)更安全的认证机制,它避免了密码以明文形式在网络中传输。 |
BearerTokenAuthenticationFilter | 用于处理基于令牌(Token)的认证的过滤器,特别是在处理 OAuth 2.0 Bearer 令牌时。这种类型的过滤器通常用于 RESTful API 和其他无状态服务中,它允许通过HTTP请求的 Authorization 头部中的令牌来认证用户。 |
BasicAuthenticationFilter | 用于处理 HTTP 基本认证的过滤器。HTTP 基本认证是一种简单的认证机制,它允许用户使用用户名和密码进行认证。 |
RequestCacheAwareFilter | 保留请求数据并在认证成功后重定向回原始请求。这对于在用户登录后重定向回他们原先尝试访问的URL非常有用。 |
SecurityContextHolderAwareRequestFilter | 包装原始的HttpServletRequest并提供额外的安全相关的方法,如isUserInRole |
JaasApiIntegrationFilter | 用于集成Java Authentication and Authorization Service (JAAS) API。它执行JAAS登录并将结果放入Spring Security的安全上下文中 |
RememberMeAuthenticationFilter | 处理“记住我”认证,这通常涉及到检查Cookies并在会话中自动认证用户 |
AnonymousAuthenticationFilter | 为没有登录的用户创建一个匿名的认证令牌,使系统可以识别未登录用户 |
OAuth2AuthorizationCodeGrantFilter | 用于处理OAuth 2.0授权码授予流程,处理从授权服务器返回的授权码 |
SessionManagementFilter | 管理会话,包括会话固定保护和并发会话控制 |
ExceptionTranslationFilter | 捕获Spring Security过程中的异常,并将它们转换为相应的HTTP响应或重定向 |
FilterSecurityInterceptor | 最后一个安全过滤器,负责在请求执行之前检查访问权限,基于配置的安全规则 |
AuthorizationFilter | 这个过滤器不是Spring Security的标准部分,可能是特定应用或框架的一部分,用于特定类型的授权决策 |
SwitchUserFilter | 允许用户切换或扮演另一个用户,通常用于管理员调试或用户支持 |