10.SpringSecurity-认证流程源码级详解

前言

了解SpringSecurity更多功能前,我们先了解下其认证流程源码

我们在前面几节中说了SpringSecurity的个性化用户认证流程:

10.SpringSecurity-认证流程源码级详解

自定义用户认证逻辑:

10.SpringSecurity-认证流程源码级详解

我们上面都是去实现Spring给我们的接口,比如自定义用户认证逻辑:

实现UserDetails、UserDetailsService、接口;

在个性化用户认证流程时候实现SpringSecurity自带的:登录失败实现:AuthenticationFailureHandler;登录成功实现:

AuthenticationSuccessHandler接口。

目前头脑里就是碎片化的登录认证流程,只知道登录成功怎么做,登录失败后如何做?但是在Spring里面是怎样把所有逻辑串起来的?

内容

认证流程源码级详解主要讲解以下3点:

  1. 认证处理流程说明
  2. 认证结果如何在多个请求之间共享
  3. 获取认证用户信息

1. 认证处理流程说明

10.SpringSecurity-认证流程源码级详解

我们以表单认证为例:从发起认证请求到认证过滤器,接着认证成功后,响应从认证过滤器返回的整个过程。SpringSecurity做了什么,设计到了哪些类?他们之间如何调用?

SpringSecurity认证流程中涉及到的主要的类和接口如下:

10.SpringSecurity-认证流程源码级详解

我们按照上面图示剖析源码:

应用debug启动,浏览器登录:

10.SpringSecurity-认证流程源码级详解

10.SpringSecurity-认证流程源码级详解

UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);

10.SpringSecurity-认证流程源码级详解

super((Collection)null);//调用父类构造函数;

10.SpringSecurity-认证流程源码级详解

AuthenticationManager:自身并不包含验证逻辑,作用用来管理下面的AuthenticationProvider;AuthenticationManager下面有很多实现类,最后是在

ProviderManager:

10.SpringSecurity-认证流程源码级详解

10.SpringSecurity-认证流程源码级详解

ProviderManager在public Authentication authenticate(Authentication authentication)会进行for循环,获取所有AuthenticationProvider,所有校验逻辑是在AuthenticationProvider里面的,为什么这里是一个集合:是因为不同的登录方式其认证逻辑是不一样的,我们现在是用户名密码登录,是需要去校验密码。如果是微信登录,则又是不一样的。AuthenticationManager作用就是把所有AuthenticationProvider搜集起来,认证时候,挨个去问,你当前的provider支不支持我现在的的登录方式(其实就是做循环,然后调用supports方法)。

10.SpringSecurity-认证流程源码级详解

10.SpringSecurity-认证流程源码级详解

然后进入DaoAuthenticationProvider,DaoAuthenticationProvider会调用其父类的AbstractUserDetailsAuthenticationProvider的

public class DaoAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider

authenticate方法

10.SpringSecurity-认证流程源码级详解

这里和我们自定义认证逻辑上符合了,我们自定义认证逻辑时候就是实现了一个UserDetailsService接口。

10.SpringSecurity-认证流程源码级详解

预检查—->检查UserDetails的3个boolean:

10.SpringSecurity-认证流程源码级详解

附加检查:在DaoAuthenticationProvider—>检查密码是否匹配

10.SpringSecurity-认证流程源码级详解

然后进行后检查:后检查主要检查4个boolean中最后一个:

10.SpringSecurity-认证流程源码级详解

如果上面检验全部没问题的话,就认为认证是合法的,然后我们再创建一个已经授权的Authentication

10.SpringSecurity-认证流程源码级详解

10.SpringSecurity-认证流程源码级详解

10.SpringSecurity-认证流程源码级详解

最后就会按照下图链返回:一直到:UsernamePasswordAuthenticationFilter

10.SpringSecurity-认证流程源码级详解

再往下:

2. 认证结果如何在多个请求之间共享

3. 获取认证用户信息

原文 

https://segmentfault.com/a/1190000022031576

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 10.SpringSecurity-认证流程源码级详解

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址