Spring Security 中用于身份验证的通用身份验证过滤器
Posted
技术标签:
【中文标题】Spring Security 中用于身份验证的通用身份验证过滤器【英文标题】:Generic Authentication Filter in Spring Security used for Authentication 【发布时间】:2022-01-20 10:00:03 【问题描述】:我是 Spring Security 的新手,想更好地了解身份验证过程
这是我在互联网上找到的与该主题相关的内容,如果我在过程中有错误,请告诉我:
-
身份验证过程从
Filter
开始,它可能是FilterChain
的一部分。过滤器的类型可能是UsernamePasswordAuthenticationFilter
。 HTTP 请求被拦截,并试图创建一个Authentication Request
(实现Authentication
接口的类的对象,即UsernamePasswordAuthenticationToken
)。
Authentication
对象被委托给AuthenticationManager
。
根据传递给AuthenticationManager
的内容,它将其委托给适当的AuthenticationProvider
(即DaoAuthenticationProvider
),在那里进行真正的身份验证。
AuthenticationProvider
将完全经过身份验证的Authentication
对象发送到AuthenticationManager
。
在调用AuthenticationManager
的Filter
中,调用SecurityContextHolder.getContext().setAuthentication(authResult);
并完成身份验证过程。
我的问题是关于Filter
类和与身份验证相关的FilterChain
的具体实现。
在我们的应用程序中,大多数身份验证过滤器都扩展了AbstractAuthenticationProcessingFilter
,并且FilterChain 属于CompositeFilter
类。这个接口的事实上的“正确”实现是什么?对于这样一个愚蠢的问题,我提前道歉,但仍然需要学习这个概念。
【问题讨论】:
您从研究中描述的一切都是正确的。不幸的是,我不清楚这个问题。您能否详细说明问题?注意:Spring Security 使用FilterChainProxy
和SecurityFilterChain
列表,而不是CompositeFilter
。
我的主要问题是关于身份验证过程的接口Filter
和SecurityFilterChain
最常用的类(实现)
【参考方案1】:
SecurityFilterChain
有一个实现,DefaultSecurityFilterChain
。
Filter
的实现太多,无法将一种实现视为最常见的实现。 Spring Security 中扩展AbstractAuthenticationProcessingFilter
的可用身份验证过滤器是UsernamePasswordAuthenticationFilter
、OAuth2LoginAuthenticationFilter
和Saml2WebSsoAuthenticationFilter
。
要使用的“正确”过滤器很大程度上取决于您的用例。
【讨论】:
以上是关于Spring Security 中用于身份验证的通用身份验证过滤器的主要内容,如果未能解决你的问题,请参考以下文章
用于身份验证的 Grails Spring Security X509 和用于权限的 LDAP
基于 SAML 的 SSO 用于身份验证和 LDAP 用于授权 - Spring Boot Security
在 Spring Security 中接收令牌的基本身份验证
如何使用spring security使用空密码进行基本身份验证?
Spring Security 3.1.4 taglib 授权/身份验证不适用于 Tomcat 7 上 JSF 2.2 中的角色层次结构