SpringSecurity-用户名密码登陆的源码解析

 最近在做Spring Security 单点集成的SSO项目,项目完成后,索性就研究了下其底层源码的具体实现。接下来,为大家分享一下用户名密码登陆的源码解析:

    首先,我们来看下下面这张类图。

登陆流程类图

1,顶层的抽象父类过滤器AbstractUserDetailsAuthenticationProvider是整个登陆流程的开始。在父类过滤器里面,会先执行子类UsernamePasswordAuthenticationFilter过滤器的一个方法:attemptAuthentication()

2,AuthenticationManager  实例化出来一个AuthenticationProvider  然后再AuthenticationProvider里面进行校验 不通的登陆方式不一样  我们表单提交是用户名密码登陆,ProviderManager负责收集所有的AuthenticationProvider  然后循环遍历调用supports 看是否是用户名密码的登陆方式,主要是查看类是否是UsernamePasswordAuthenticationToken 这个类,初始化的时候设置为false

3,DaoAuthenticationProvider 里面拿到UserDetails

4,预检查查看用户是否冻结,是否锁定,检查密码是否正确,具体检查可以跟进代码去看一下

5,所有的检查成功,则返回AbstractUserDetailsAuthenticationProvider

6,最后设置授权为true已授权

7,所有认证通过,返回一个Authentication,然后把数据保存到会话中。最后沿路返回。AbstractAuthenticationProcessingFilter 在这里设置成功失败过滤器,也就是自己定义的过滤器

8,如果认证失败,则会抛出异常,走自己定义的失败过滤器

以上:则是主要的用户名密码登陆流程。

1人点赞

日记本

作者:JetBean

链接:https://www.jianshu.com/p/dcf32f47dbdd

来源:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(SpringSecurity-用户名密码登陆的源码解析)