Merge branch 'master' of gitea.rikako.cc:rikako/rikako-note
This commit is contained in:
@@ -335,5 +335,29 @@ UserDetailsManager users(DataSource dataSource) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
### UserDetails
|
### 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