DaoAuthenticationProvider
DaoAuthenticationProvider
是一个 AuthenticationProvider
实现,它使用 UserDetailsService
和 PasswordEncoder
来验证用户名和密码。
本节将探讨 DaoAuthenticationProvider
在 Spring Security 中的工作原理。下图解释了 AuthenticationManager
的工作原理,这些图来自 读取用户名和密码 部分。
DaoAuthenticationProvider
使用 来自 读取用户名和密码 部分的认证 Filter
将 UsernamePasswordAuthenticationToken
传递给 AuthenticationManager
,AuthenticationManager
由 ProviderManager
实现。
ProviderManager
被配置为使用类型为 DaoAuthenticationProvider
的 AuthenticationProvider。
DaoAuthenticationProvider
从 UserDetailsService
中查找 UserDetails
。
DaoAuthenticationProvider
使用 PasswordEncoder
验证上一步返回的 UserDetails
上的密码。
当身份验证成功时,返回的 Authentication
的类型为 UsernamePasswordAuthenticationToken
,其主体是配置的 UserDetailsService
返回的 UserDetails
。最终,返回的 UsernamePasswordAuthenticationToken
由身份验证 Filter
设置在 SecurityContextHolder
上。