DaoAuthenticationProvider

DaoAuthenticationProvider 是一个使用 UserDetailsServicePasswordEncoder 来验证用户名和密码的 AuthenticationProvider 实现。

本节介绍 DaoAuthenticationProvider 在 Spring Security 中的工作原理。下图解释了来自 读取用户名和密码 部分的图中 AuthenticationManager 的工作原理。

daoauthenticationprovider
图 1. DaoAuthenticationProvider 用法

数字 1 来自 读取用户名和密码 部分的身份验证 FilterUsernamePasswordAuthenticationToken 传递给 AuthenticationManagerAuthenticationManagerProviderManager 实现。

数字 2 ProviderManager 配置为使用类型为 DaoAuthenticationProviderAuthenticationProvider

数字 3 DaoAuthenticationProviderUserDetailsService 中查找 UserDetails

数字 4 DaoAuthenticationProvider 使用 PasswordEncoder 验证上一步返回的 UserDetails 上的密码。

数字 5 当身份验证成功时,返回的 Authentication 的类型为 UsernamePasswordAuthenticationToken,并且其主体是配置的 UserDetailsService 返回的 UserDetails。最终,返回的 UsernamePasswordAuthenticationToken 由身份验证 Filter 设置在 SecurityContextHolder 上。