Authentication


AuthenticationProvider

 每一个AuthenticationProvider对应一个Authentication
很多个AuthenticationProvider 由一个 ProviderManager管理
ProviderManager
implements AuthenticationManager
 一个ProviderManager有很多个 AuthenticationProvider
 
 
UsernamePasswordAuthenticationFilter
用户名密码登录 进入的 Filter ,,他的父类AbstractAuthenticationProcessingFilter
 

DaoAuthenticationProvider
父类是AbstractUserDetailsAuthenticationProvider
 
 这里的retrieveUser() 会返回数据库中 找到的 UserDetails 对象。。。就是UserDetailsService#loadUserByUsername 获取的对象
 
 在 AccountStatusUserDetailsChecker#check方法校验用户其他属性
 
 
 在DaoAuthenticationProvider#additionalAuthenticationChecks 校验密码
 
 
 Authenticate#getPrincipal 根据自己的Provider设置
自定义AuthenticationProvider
默认使用 DaoAuthenticationProvider 去校验,也可以自定义自己的Provider交给 ProviderManager去管理
比如: 添加短信验证码,,图形验证码
 自定义过滤器,,一般来说放在UsernamePasswordAuthenticationFilter 过滤器的前面,,每次请求都会 过这个过滤器,,但实际上,只需要登录的时候再去过那个验证码过滤器就行了,,
但是,,怎么只让登录请求经过这个过滤器呢,其他请求不进入,,
 自己写AuthenticationProvider, 并在这里面写验证码的校验,,交给 AuthenticationManager管理
- 写自己的Provider
  
- 在配置文件中配置
  
 github:https://github.com/water-kid/spring-security/tree/master/springsecurity-mybatis



















