(十六)springboot实战——spring securtity的认证流程源码解析

前言

本节内容是关于spring security安全框架认证流程的源码分析,spring security的认证流程主要是在UsernamePasswordAuthenticationFilter过滤器中实现的。我们会通过源码层级的分析,了解清楚spring security的底层是如何实现用户的认证的。

正文

1.发起post方式的登录请求/login

- 请求首先会进入抽象的认证授权处理过滤器AbstractAuthenticationProcessingFilter中,该过滤器是UsernamePasswordAuthenticationFilter认证过滤器的抽象实现

2.调用AbstractAuthenticationProcessingFilter过滤器中的doFilter方法完成登录用户认证的流程

- 其核心步骤主要分为以下五个阶段:首先判断是否是需要授权的form表单请求,如果不是则直接放行,进入下一个过滤器;第二步,根据提交的用户名和密码使用认证管理器验证用户信息,如果认证信息不存在,则直接返回,否则继续后续的流程;第三步,执行配置的session会话访问策略;第四步,如果认证成功,将认证结果信息直接返回,完成认证过程;最后,如果认证失败,则将认证的失败信息返回。

(十六)springboot实战——spring securtity的认证流程源码解析_第1张图片

2.1requiresAuthentication()方法判断是否是需要认证的请求

- 调用requiresAuthentication方法匹配登录请求,如果是/login返回true,否则返回false

(十六)springboot实战——spring securtity的认证流程源码解析_第2张图片

- 调用matches方法完成具体的匹配逻辑,只有请求方式是post,请求路径是/login的才会执行后续的用户信息认证流程,否则直接放行。

(十六)springboot实战——spring securtity的认证流程源码解析_第3张图片

2.2调用UsernamePasswordAuthenticationFilter中的attemptAuthentication方法完成用户信息的认证

- 用户认证的完整步骤

(十六)springboot实战——spring securtity的认证流程源码解析_第4张图片

① 从请求域获取默认的用户名数据

(十六)springboot实战——spring securtity的认证流程源码解析_第5张图片

② 从请求域获取默认的密码数据

(十六)springboot实战——spring securtity的认证流程源码解析_第6张图片

③ 封装用户数据

(十六)springboot实战——spring securtity的认证流程源码解析_第7张图片

④ 调用authenticate方法完成认证用户

(十六)springboot实战——spring securtity的认证流程源码解析_第8张图片

⑤调用AbstractUserDetailsAuthenticationProvider抽象方法authenticate完成用户信息的认证

(十六)springboot实战——spring securtity的认证流程源码解析_第9张图片

⑥调用DaoAuthenticationProvider类中的retrieveUser实现具体的认证逻辑

(十六)springboot实战——spring securtity的认证流程源码解析_第10张图片

⑦调用DaoAuthenticationProvider类中的additionalAuthenticationChecks方法,比对用户密码是否和请求中的密码一致

(十六)springboot实战——spring securtity的认证流程源码解析_第11张图片

⑧认证成功后返回一个成功的认证对象Authentication

 
  

2.3 调用CompositeSessionAuthenticationStrategy实现类中的onAuthentication方法完成session会话策略处理

- session会话的处理

(十六)springboot实战——spring securtity的认证流程源码解析_第12张图片

2.4调用successfulAuthentication方法,完成用户认证成功的处理

- 实现认证成功的处理

(十六)springboot实战——spring securtity的认证流程源码解析_第13张图片

- 进入自定义的认证处理器完成用户的认证流程

(十六)springboot实战——spring securtity的认证流程源码解析_第14张图片

2.5 调用unsuccessfulAuthentication方法,完成认证失败的处理

- 清除上下文信息,进入认证失败的处理器

(十六)springboot实战——spring securtity的认证流程源码解析_第15张图片

- 自定义的认证失败处理器

(十六)springboot实战——spring securtity的认证流程源码解析_第16张图片

3.整体认证流程 

(十六)springboot实战——spring securtity的认证流程源码解析_第17张图片

结语

至此,关于spring securtity的认证流程源码解析到这里就结束了,我们下期见。。。。。。

你可能感兴趣的:(#,springboot,spring,boot)