【RuoYi-Vue-Plus】学习笔记 29 - Sa-Token(四)V1.30.0 登录流程分析(Sa-Token 源码)

前言

之前已经写过一篇 Sa-Token 登录流程分析的 文章,好像那篇文章的阅读量也不算低(在本人博客专栏中),但是因为版本更新以及本人想要提高一下内容质量,所以重新写了一下分析的内容,并且加上了流程图,便于流程的梳理。

参考目录

框架集成

基于 Sa-Token 最新版本:
在这里插入图片描述
yaml 配置文件:
在这里插入图片描述

功能调用流程分析

##、流程简图(重点)

首先按照惯例,请记住这张图(后面的流程截图都是基于此):
在这里插入图片描述
温馨提醒,由于流程步骤较多,结合这张图走不容易迷路

#1、登录请求 SysLoginController#login

在这里插入图片描述

#2、登录方法 SysLoginService#login

在这里插入图片描述
登录方法大致可以分为七个步骤:

  1. 检查验证码开关是否开启,如果开启则校验验证码是否正确。(#2)
  2. 根据用户名获取用户信息;验证用户密码是否正确。(#3)
  3. 构建登录用户对象。(#4)
  4. 生成 Token。(#5)
  5. 记录登录信息日志。(#20)
  6. 更新用户登录信息。(#21)
  7. 获取用户 Token 值。 (#22)

因为把验证码开关关掉了,所以这里没有进入校验方法 SysLoginService#validateCaptcha
在这里插入图片描述

#3、获取用户信息并校验密码是否正确 SysLoginService#checkLogin

如果密码错误,会记录错误次数,如果达到指定次数(默认5次)则账号会被锁定一段时间(默认10分钟)。
在这里插入图片描述

#4、构建登录用户对象 SysLoginService#buildLoginUser

经过步骤 #3 说明登录校验通过,可以构建登录对象。
在这里插入图片描述
在这里插入图片描述

#5、生成 Token LoginHelper#loginByDevice

在这里插入图片描述
该方法一共有三个步骤:

  1. 将用户信息存入request对象中,方便后面信息共享。(#6)
  2. 调用 Sa-Token 登录方法。(#7)
  3. 设置用户数据多级缓存。 (#19)

SaHolder.getStorage() 获取 request 对象:
在这里插入图片描述

#8、Sa-Token 登录方法 StpUtil#login

在这里插入图片描述
id 是 loginUser.getLoginId 方法所得,在方法内做了拼接:
在这里插入图片描述

#9、StpLogic#login

在这里插入图片描述
在这里插入图片描述

#10、创建登录会话 StpLogic#createLoginSession(核心)

在这里插入图片描述

整个登录流程的核心方法,在源码注释中也包含了主要的流程步骤:

  1. 前置检查:此账号是否已被封禁。(#11)
  2. 初始化 loginModel。(#12)
  3. 生成一个 Token。(#13)
  4. 获取 User-Session 并续期。(#14)
  5. 持久化其他数据。(#15)
  6. 通知监听器账号登录成功。(#16)
  7. 检查此账号会话数量是否超出最大值。(#17)

#11、前置检查:此账号是否已被封禁 StpLogic#isDisable

在这里插入图片描述
StpLogic#splicingKeyDisable
在这里插入图片描述
执行结果:
在这里插入图片描述
在这里插入图片描述

#12、初始化 loginModel

在这里插入图片描述

#13、生成一个 Token

在这里插入图片描述
StpLogicJwtForSimple#createTokenValue
在这里插入图片描述
SaJwtUtil#createToken
在这里插入图片描述

#14、获取 User-Session 并续期

在这里插入图片描述
前面登录了3次,此次流程是第4次。
在这里插入图片描述
SaSession#addTokenSign
在这里插入图片描述
将新的 Token 保存到集合中,并且更新缓存:
在这里插入图片描述
在这里插入图片描述

#15、持久化其它数据

// token -> id 映射关系  
saveTokenToIdMapping(tokenValue, id, loginModel.getTimeout());

在这里插入图片描述

// 写入 [token-last-activity] :
setLastActivityToNow(tokenValue); 

在这里插入图片描述

#16、通知监听器账号登录成功 UserActionListener#doLogin

在这里插入图片描述
在这里插入图片描述

#17、检查此账号会话数量是否超出最大值

在这里插入图片描述
StpLogic#logoutByMaxLoginCount
在这里插入图片描述
至此会话创建成功,回到上一层方法 StpLogic#login 继续执行。

#18、在当前客户端注入 Token StpLogic#setTokenValue

在这里插入图片描述
StpLogic#setTokenValueToStorage
在这里插入图片描述
Sa-Token 登录方法执行完成,回到框架登录方法设置用户多级缓存。

#19、设置用户数据(多级缓存)LoginHelper#setLoginUser

在这里插入图片描述
用户登录流程生成 Token 方法执行完成,继续回到主方法 SysLoginService#login 执行余下的逻辑。

#20、记录登录信息 SysLogininforServiceImpl#recordLogininfor

在这里插入图片描述

#21、更新用户登录信息 SysLoginService#recordLoginInfo

在这里插入图片描述

#22、获取用户 Token 值 StpLogic#getTokenValue

在这里插入图片描述
将 Token 值返回给前端,登录方法执行结束。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MichelleChung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值