日常提交

This commit is contained in:
2022-10-12 22:42:42 +08:00
parent 7626248e9f
commit 989ab8c59b

View File

@@ -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一起认证的信息。对于UserDetailsServiceSpring 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中传递给AuthenticationManagerProviderManager实现了AuthenticationManager
2. ProviderManager被配置为使用DaoAuthenticationProvider
3. DaoAuthenticationProvider通过UserDetailsService来查找UserDetails
4. DaoAuthenticationProvider通过PasswordEncoder来验证UserDetails中的密码
5. 当验证成功时会返回UsernamePasswordAuthenticationToken类型的Authentication并且返回的Authentication拥有一个主体为UserDetailsService返回的UserDetails
6. 返回的UsernamePasswordAuthenticationToken会在SecurityContextHolder中保存