日常提交
This commit is contained in:
@@ -335,5 +335,29 @@ UserDetailsManager users(DataSource dataSource) {
|
||||
}
|
||||
```
|
||||
### UserDetails
|
||||
UserDetails是通过UserDetailsService返回的。DaoAuthenticationProvider对UserrDetails进行验证并且返回
|
||||
UserDetails是通过UserDetailsService返回的。DaoAuthenticationProvider对UserrDetails进行验证并且返回Authentication.
|
||||
|
||||
### UserDetailsService
|
||||
UserDetailsService被DaoAuthenticationProvider调用,用来获取username、password和其他随着password/username一起认证的信息。对于UserDetailsService,Spring Security提供了in-memory和jdbc两种实现形式。
|
||||
可以通过自定义UserDetailsService类bean对象的方式来自定义认证过程。
|
||||
```java
|
||||
// 自定义UserDetailsService的bean对象
|
||||
@Bean
|
||||
CustomUserDetailsService customUserDetailsService() {
|
||||
return new CustomUserDetailsService();
|
||||
}
|
||||
```
|
||||
|
||||
### PasswordEncoder
|
||||
Spring Security支持PasswordEncoder来安全的存储密码。可以通过自定义PasswordEncoder类的bean对象的形式来自定义Spring Security安全存储密码的过程。
|
||||
|
||||
### DaoAuthenticationProvider
|
||||
DaoAuthenticationProvider是AuthenticationProvider的一个实现类,通过调用UserDetailsService和PasswordEncoder来认证用户名和密码。
|
||||
Spring Security中DaoAuthenticationProvider的工作流程:
|
||||
1. authentication filter会读取username和password并且将其封装到UsernamePasswordAuthenticationToken中传递给AuthenticationManager,ProviderManager实现了AuthenticationManager
|
||||
2. ProviderManager被配置为使用DaoAuthenticationProvider
|
||||
3. DaoAuthenticationProvider通过UserDetailsService来查找UserDetails
|
||||
4. DaoAuthenticationProvider通过PasswordEncoder来验证UserDetails中的密码
|
||||
5. 当验证成功时,会返回UsernamePasswordAuthenticationToken类型的Authentication,并且返回的Authentication拥有一个主体为UserDetailsService返回的UserDetails
|
||||
6. 返回的UsernamePasswordAuthenticationToken会在SecurityContextHolder中保存
|
||||
|
||||
|
||||
Reference in New Issue
Block a user