浅析Spring Security登录验证流程源码

  

  

Spring Security的登录验证流程核心就是过滤器链。当一个请求到达时按照过滤器链的顺序依次进行处理,通过所有过滤器链的验证,就可以访问API接口了。

  

浅析Spring Security登录验证流程源码

  

SpringSecurity提供了多种登录认证的方式,由多种滤过滤器来实现,比如:

  
      <李> BasicAuthenticationFilter实现的是HttpBasic模式的登录认证   <李> UsernamePasswordAuthenticationFilter实现用户名密码的登录认证   <李> RememberMeAuthenticationFilter实现登录认证的“记住我”的功能李   <李> SmsCodeAuthenticationFilter实现短信验证码登录认证   <李> SocialAuthenticationFilter实现社交媒体方式登录认证的处理李   <李> Oauth3AuthenticationProcessingFilter和Oauth3ClientAuthenticationProcessingFilter实现Oauth3的鉴权方式
      李   
  

根据我们不同的需求实现及配置,不同的过滤器会被加载到应用中。

  


  

  

我们就以用户名:密码登录方式为例讲解一下Spring Security的登录认证流程。

  

浅析Spring Security登录验证流程源码

  

2.1 UsernamePasswordAuthenticationFilter
  

  

该过滤器封装用户基本信息(用户名:密码),定义登录表单数据接收相关的信息。如:

  
      <李>默认的表单用户名密码输入框的名字是用户名、密码李   <李>默认的处理登录请求路径是/登录,使用发布方法
      李   
  

浅析Spring Security登录验证流程源码”> <br/>
  <img src=

  

2.2 AbstractAuthenticationProcessingFilter doFilter方的法的验证过程
  

  

UsernamePasswordAuthenticationFilter继承自抽象类AbstractAuthenticationProcessingFilter,该抽象类定义了验证成功与验证失败的处理方法。
  

  

浅析Spring Security登录验证流程源码

  

2.3验证成功之后的处理程序和验证失败之后的处理程序
  

  

浅析Spring Security登录验证流程源码

  

也就是说当我们需要自定义验证成功或失败的处理方法时,要去实现AuthenticationSuccessHandler或AuthenticationfailureHandler接口

  

浅析Spring Security登录验证流程源码

  

  

3.1多种认证方式的管理ProviderManager
  

  

ProviderManager用继承于AuthenticationManager是登录验证的核心类.ProviderManager保管了多个AuthenticationProvider,用于不同类型的登录验证。比如:

  
      <李> RememberMeAuthenticationProvider定义了“记住我“功能的登录验证逻辑李   <李> DaoAuthenticationProvider加载数据库用户信息,进行用户密码的登录验证   
  

公共类ProviderManager实现AuthenticationManager MessageSourceAware InitializingBean {
  ,,
……   ,,私人List提供者;
  ,,
……   

  

下文是ProviderManager的核心源码,遍历不同登录验证的AuthenticationProvider,只有当这种方式被支持的时候,才执行具体的登录验证逻辑。
  

  

浅析Spring Security登录验证流程源码

  

3.2登录认证接口AuthenticationProvider
  

        公共接口AuthenticationProvider {   身份验证进行身份验证(验证var1) AuthenticationException扔;   布尔支持(Class<& # 63;比;var1);   }   
     

AuthenticationProvider的实现类定义了具体的登录验证逻辑

  

浅析Spring Security登录验证流程源码

  

3.3数据库加载用户信息DaoAuthenticationProvider
  

        公开课DaoAuthenticationProvider延伸AbstractUserDetailsAuthenticationProvider {

浅析Spring Security登录验证流程源码