“ Spring Secuirty 认证实现源码分析 ”
Spring Security 认证原理
Spring Security 主要是通过一组责任制的过滤链SecurityFilterChain进行实现认证授权的功能,当请求经过登录认证实现的过滤器UsernamePasswordAuthenticationFilter就会匹配判断是否登录请求认证。
Spring Security 实现过程
UsernamePasswordAuthenticationFilter是Spring Security默认登录认证过滤器继承AbstractAuthenticationProcessingFilter,doFilter方法进行处理。
1、认证拦截
当请求路径为/login的POST请求经过到UsernamePasswordAuthencationFilter默认拦截匹配通过调用AuthenticationManager.authenticate(authRequest)开始认证,可以自定义实现用户登录接口。
2、认证实现
实现用户登录认证管理器AuthenticationManager提供多种实现方式认证管理器,默认实现认证管理器ProviderManager为用户登录提供多种认证实现,使用DaoAuthenticationProvider实现进行登录认证,然后通过UserDetailService实现类查找用户信息和匹对, PasswordEncoder 验证码器对密码加密对比。
3、认证失败处理
3.1、SecurityContextHolder上下文是通过ThreadLocal当前线程机制保存登录信息,登录失败后清空内容;
3.2、RememberMeServices是处理用户登录记住登录状态cookie信息,调用登录失败方法清空记住登录cookie 信息,参考之前的文章;
3.3、AuthenticationFailureHandler是登录失败后响应信息,默认是跳转页面,可以在这里自定义实现json返回,登录失败的响应。
4、认证成功处理
4.1、SessionAuthenticationStrategy是对Session管理机制,登录成功后生成和保存Session的机制。
4.2、SecurityContextHolder上下文是通过ThreadLocal当前线程机制保存登录信息,登录成功保存使用者的信息在上下文;
4.3、RememberMeServices是处理用户登录记住登录状态cookie信息,调用登录成功方法,参考之前的文章;
4.4、ApplicationEventPublisher是通过消息机制异步自定义处理逻辑,比如登录成功后通知信息;
4.5、AuthenticationSeccuessHandler是登录成功后响应信息,默认是跳转页面,可以在这里自定义实现json返回响应信息,比如登录成功的响应码。
更多内容信息欢迎【关注】公众号