【发布时间】: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最常用的类(实现)
标签: java authentication spring-security servlet-filters