目录

 

1.认证处理流程说明

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

3.获取认证用户信息


1.认证处理流程说明

    Security--03(认证流程的源码)

   表单登录的请求首先会到达UsernamePasswordAuthenticationFilter,在这里面会拿到用户名和密码,然后创建一个重要的对象UsernamePasswordAuthenticationToken,

Security--03(认证流程的源码)

Security--03(认证流程的源码)

然后会到达流程图的AuthenticationManager,这里的实现是ProviderManager

Security--03(认证流程的源码)

然后流程会到AuthenticationProvider,

Security--03(认证流程的源码)

对于AuthenticationProvider的实现,Security会有这么多个实现的类

Security--03(认证流程的源码)

不同的认证请求会进行不同的Provider的认证。AbstractUserDetailsAuthenticationProvider有一个实现类是DaoAuthenticationProvider,

Security--03(认证流程的源码)

在这里面有一个retrieveUser的方法,这里是调用UserDetailsService这个接口的实现,获取用户的信息,到这里就走到了流程的UserDetailsService的步骤。

Security--03(认证流程的源码)

Security--03(认证流程的源码)

拿到用户的信息后回到Provider里面他会做一个预检查,预检查检查三个布尔类型的值。

Security--03(认证流程的源码)

Security--03(认证流程的源码)

然后调了一个附加检查,检查密码是否匹配

Security--03(认证流程的源码)

Security--03(认证流程的源码)

后检查,检查最后的一个布尔。

Security--03(认证流程的源码)

所有的检查通过后创建了一个新的UsernamePasswordAuthenticationToken

Security--03(认证流程的源码)

然后会返回到AbstractAuthenticationProcessingFilter,然后调我们写的认证成功后的处理

Security--03(认证流程的源码)

Security--03(认证流程的源码)

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

 我们注意到在认证成功返回的时候会有这样一个操作

 Security--03(认证流程的源码)

SecurityContext就是对认证结果的一个简单的封装,里面有认证过的Authentication

Security--03(认证流程的源码)

SecurityContextHolder是对ThreadLocal做了一个封装。

 Security--03(认证流程的源码)

 Security--03(认证流程的源码)

SecurityContextPersistenceFilter这个过滤器保证了认证结果在多个请求之间共享,当请求过来了以后会到这个过滤器,他会检查session里面是否有SecurityContext,如果有就把SecurityContext从Session里面拿出来放到线程里面,当请求回来的时候也会检查这个SecurityContext(线程)有没有,如果有就拿出来放到Session里面。

Security--03(认证流程的源码)

如何在普通的类中拿到当前的请求的session信息,网上是提供了一个方法:https://www.cnblogs.com/yangzhilong/p/11425072.html,但是在JWT的模式下是拿不到的。

3.获取认证用户信息

   Security--03(认证流程的源码)

 

相关文章:

  • 2021-07-31
  • 2021-07-13
  • 2021-10-16
  • 2021-08-30
  • 2021-09-01
  • 2022-01-04
  • 2021-07-23
猜你喜欢
  • 2022-02-12
  • 2021-11-30
  • 2021-11-30
  • 2021-09-14
  • 2021-11-28
  • 2021-06-30
  • 2021-09-05
相关资源
相似解决方案