前言
本节内容是关于spring security安全框架认证流程的源码分析,spring security的认证流程主要是在UsernamePasswordAuthenticationFilter过滤器中实现的。我们会通过源码层级的分析,了解清楚spring security的底层是如何实现用户的认证的。
正文
1.发起post方式的登录请求/login
- 请求首先会进入抽象的认证授权处理过滤器AbstractAuthenticationProcessingFilter中,该过滤器是UsernamePasswordAuthenticationFilter认证过滤器的抽象实现
2.调用AbstractAuthenticationProcessingFilter过滤器中的doFilter方法完成登录用户认证的流程
- 其核心步骤主要分为以下五个阶段:首先判断是否是需要授权的form表单请求,如果不是则直接放行,进入下一个过滤器;第二步,根据提交的用户名和密码使用认证管理器验证用户信息,如果认证信息不存在,则直接返回,否则继续后续的流程;第三步,执行配置的session会话访问策略;第四步,如果认证成功,将认证结果信息直接返回,完成认证过程;最后,如果认证失败,则将认证的失败信息返回。
2.1requiresAuthentication()方法判断是否是需要认证的请求
- 调用requiresAuthentication方法匹配登录请求,如果是/login返回true,否则返回false
- 调用matches方法完成具体的匹配逻辑,只有请求方式是post,请求路径是/login的才会执行后续的用户信息认证流程,否则直接放行。
2.2调用UsernamePasswordAuthenticationFilter中的attemptAuthentication方法完成用户信息的认证
- 用户认证的完整步骤
① 从请求域获取默认的用户名数据
② 从请求域获取默认的密码数据
③ 封装用户数据
④ 调用authenticate方法完成认证用户
⑤调用AbstractUserDetailsAuthenticationProvider抽象方法authenticate完成用户信息的认证
⑥调用DaoAuthenticationProvider类中的retrieveUser实现具体的认证逻辑
⑦调用DaoAuthenticationProvider类中的additionalAuthenticationChecks方法,比对用户密码是否和请求中的密码一致
⑧认证成功后返回一个成功的认证对象Authentication
2.3 调用CompositeSessionAuthenticationStrategy实现类中的onAuthentication方法完成session会话策略处理
- session会话的处理
2.4调用successfulAuthentication方法,完成用户认证成功的处理
- 实现认证成功的处理
- 进入自定义的认证处理器完成用户的认证流程
2.5 调用unsuccessfulAuthentication方法,完成认证失败的处理
- 清除上下文信息,进入认证失败的处理器
- 自定义的认证失败处理器
3.整体认证流程
结语
至此,关于spring securtity的认证流程源码解析到这里就结束了,我们下期见。。。。。。