上一篇:Spring Security05--手机验证码登录_fengxianaa的博客-CSDN博客
10. 认证流程
梳理一下认证流程
- 用户提交用户名、密码被 UsernamePasswordAuthenticationFilter 过滤器拿到,
- 封装为 :UsernamePasswordAuthenticationToken(它实现了 Authentication 接口)
- 然后将Authentication 提交给 证管理器(AuthenticationManager)进行认证
- 就是这句代码:this.getAuthenticationManager().authenticate(authRequest);
- authenticate 方法中调用 AuthenticationProvider 对象的 authenticate 方法进行认证
- 手机登录调用的是我们自己的:PhoneAuthenticationProvider
- 账号密码登录调用的是:DaoAuthenticationProvider
- 认证过程:
- 通过 UserDetailsService 查询用户对象
- 手机登录调用的是我们自己的:LoginPhoneService
- 账号密码登录调用的是:LoginUserService
- 比较密码是否正确(手机登录比较的是验证码)
- 成功后重新创建Authentication对象,把当前用户放进去
- 通过 UserDetailsService 查询用户对象
- 认证结束后,把 Authentication 对象,放到 SecurityContext 中
- 执行的是:SecurityContextHolder.getContext().setAuthentication();
- 之后就可以通过SecurityContextHolder.getContext().getAuthentication(); 获取当前用户