前言

前两篇文章简单分析了一下登录以及通过注解校验权限的流程,有登录就有登出,所以这篇文章就来分析一下登出的流程源码。

参考目录

代码分析

请求接口:SysLoginController#logout
在这里插入图片描述
方法很简单,就一行代码。看看官方文档的说法:

这里是引用
强制注销等价于对方主动调用了注销方法,再次访问会提示:Token无效。

StpLogic#logout

在这里插入图片描述
方法的步骤主要有以下几点:

  • 如果连token都没有,那么无需执行任何操作
  • 从当前 [storage存储器] 里删除
  • 如果打开了Cookie模式,则把cookie清除掉
  • 清除这个token的相关信息

下面来对每一步骤进行 Debug 分析。

1、获取当前用户 token,判断是否存在

在这里插入图片描述

StpLogic#getTokenValue

在这里插入图片描述
获取 token 的方法,在登录流程里面也有用到这个方法。

StpLogic#getTokenValueNotCut

在这里插入图片描述
从请求头中获取到 token (未裁剪前缀) 并返回。
在这里插入图片描述
去掉前缀,得到最终的 token 并返回到上一级。
在这里插入图片描述
在这里插入图片描述
token 不为空,继续执行下面的代码。

2、从当前【storage 存储器】里删除

在这里插入图片描述
先获取 storage 存储器。
在这里插入图片描述

SaTokenContextForSpring#getStorage

实际上就是根据 request 请求数据 new 了一个 SaStorageForServlet
在这里插入图片描述
在这里插入图片描述

StpLogic#splicingKeyJustCreatedSave

在这里插入图片描述

SaStorageForServlet#delete

在这里插入图片描述

3、判断配置,把 cookie 清除掉

配置文件:
在这里插入图片描述
在这里插入图片描述
没有配置 Cookie 模式,继续执行下面的代码。

4、清除 token 的相关信息
StpLogic#logoutByTokenValue

在这里插入图片描述

4.1、清理 token-last-activity
StpLogic#clearLastActivity

在这里插入图片描述
判断是否是用不过期:false(配置时间是 1800 秒)。

删除最后操作时间:
在这里插入图片描述
清除标记,调用 storage 存储器删除 request 中的值。
在这里插入图片描述
完成操作返回上一级。

4.2、注销 Token-Session
StpLogic#deleteTokenSession

在这里插入图片描述

4.3、根据 token 获取 loginId,清理 token-id 索引
StpLogic#getLoginIdNotHandle

在这里插入图片描述
loginId 值为 sys_user:1
在这里插入图片描述
删除 token-id 映射。
在这里插入图片描述

4.4、通知监听器,某某 Token 注销下线了
UserActionListener#doLogout

在这里插入图片描述
控制台输出:
在这里插入图片描述

4.5、清理 User-Session 上的 token 签名 & 尝试注销 User-Session

在这里插入图片描述
移除 session 中的相关信息:
在这里插入图片描述
至此 StpLogic#logout 方法全部执行完成。用户退出成功:
在这里插入图片描述

Logo

快速构建 Web 应用程序

更多推荐