有什么不同吗?
Authentication auth= authenticationManager.authenticate(authentication);
和
Authentication auth= authenticationProvider.authenticate(authentication);
答案 0 :(得分:9)
AuthenticationManager
包含AuthenticationProvider
个实例的列表。
执行authenticationManager.authenticate()
这实际上是迭代AuthenticationProvider
的所有实例并尝试对每个实例进行身份验证。
AuthenticationManager
的默认spring实现是org.springframework.security.authentication.ProviderManager
实际身份验证在AuthenticationProvider中执行。
每个AuthenticationProvider
都包含UserDetailsService
的实例,该实例负责从数据库或LDAP中提取用户信息(包括散列密码)。一旦从数据库中成功检索到UserDetails
的实例
然后,AuthenticationProvider
将使用PasswordEncoder
实例来检查密码用户是否提供了您从数据库中检索到的哈希密码。