Spring Security 5.1.4 的学习笔记(二)

版权声明:个人原创 https://blog.csdn.net/qq_42459181/article/details/89333606

一、Spring Security 深入


1. 认证流程:

在这里插入图片描述

2. 过滤器链:

在这里插入图片描述
SecurityContextPersistenceFilter作用:当请求进入时,检查session里是否有SecurityContext,如果有,就将SecurityContext放入线程中;当响应时,检查线程中是否有SecurityContext,如果有就将SecurityContext放入session中。

3. “记住我” 功能:

  3. 两种实现方式

    1.将登陆用户的Token持久化到数据库:用户第一次登陆时勾选“记住我”,登陆成功时将Token分别写入Cookie数据库中,等用户发起服务请求时,带着Token访问服务器,服务器会拿着这个Token去数据库里查找,如果有,则验证用户处于已登录状态,允许访问服务。此种方式的优劣如下。
  优点:Token被持久化到数据库,服务器重启之后Token也不会消失,可以顺利访问。
  缺点:查询Token信息会访问数据库(传统关系型数据库,如mysql),并发压力较大,性能较差。

    原理如下
在这里插入图片描述
  RememberMeAuthenticationFilter 所在位置
    位于绿色过滤器链的倒数第二个。
在这里插入图片描述
    源码如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
    2.session 方式:用户登陆后会将session储存在服务器上,再次访问会校验session。此种方式不具有持久化,重启服务器时,保存在服务器中的session将消失。至于能不能配合redis做短暂的持久化(redis也有过期时间),以后另做研究。
    源码如下
在这里插入图片描述
在这里插入图片描述

4. 短信验证码 功能:

通过阿里云短信服务实现,在此不做赘述。

猜你喜欢

转载自blog.csdn.net/qq_42459181/article/details/89333606