当前位置: 首页 > backend >正文

【Sa-Token】学习笔记05 - 踢人下线源码解析

目录

前言

强制注销

踢人下线

源码解析


前言

所谓踢人下线,核心操作就是找到指定 loginId 对应的 Token,并设置其失效。

上图为踢人下线后,前端应该用图像给出来让用户重新登录,而不是让前端收到一个描述着被下线

JSON

强制注销

StpUtil.logout(10001);                    // 强制指定账号注销下线 
StpUtil.logout(10001, "PC");              // 强制指定账号指定端注销下线 
StpUtil.logoutByTokenValue("token");      // 强制指定 Token 注销下线 

踢人下线

StpUtil.kickout(10001);                    // 将指定账号踢下线 
StpUtil.kickout(10001, "PC");              // 将指定账号指定端踢下线
StpUtil.kickoutByTokenValue("token");      // 将指定 Token 踢下线

强制注销 和 踢人下线 的区别在于:

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

  • 踢人下线不会清除Token信息,而是将其打上特定标记,再次访问会提示:Token已被踢下线。

源码解析

StpUtils.kickout根据loginId踢人下线,StpUtils调用StpLogic进行踢人下线。

获取SaTokenConfig配置类,构建SaLogoutParameter对象,例如:注销范围、如果token已被

冻结是否保留操作、注销token是否保留对应Token-Session。

 logoutParameter设置注销类型为踢人下线。

根据sessionId从SaTokenDao获取SaSession,SaTokenDao从IOC里面获取,如果获取不到就使

用默认的SaTokenDaoDefaultImpl(),默认将数据存储在内存,存储在内存使用ConcurrentHashMap

中,一般我们会实现SaToKen接口,重写里面方法,将数据存储在Redis中,sa-token有集成了

Redis,我们导入sa-token-redis-template依赖即可。

获取登录设备终端信息,如果设备类型为空,则返回所有终端设备。

从Account-Session上清楚此设备信息,移除设备相关信息并且更新Session。 

清楚这个token的Token-Session对象,删除指定token的Token-Session。

根据注销模式走不同处理,踢人下线更新缓存中的token指向,改为-5。最后发布订阅时间:xxx账

号被踢下线。

最后判断一下这个Account-Session还有没有客户端登录,如果没有直接注销这个Account-

Session。

http://www.xdnf.cn/news/752.html

相关文章:

  • Few-shot medical image segmentation with high-fidelity prototypes 论文总结
  • 计算机网络综合实验指南
  • 【Rust 精进之路之第14篇-结构体 Struct】定义、实例化与方法:封装数据与行为
  • 【操作系统原理06】虚拟存储器
  • CLion编译器中配置ARM嵌入式开发环境教程
  • 面试题:循环引用两个节点相互引用,如何判断哪个用 shared_ptr?哪个用 weak_ptr?
  • ThreadLocal - 原理与应用场景详解
  • 蓝桥杯 二进制问题 刷题笔记
  • 一个旅行攻略需要调用多少个MCP的服务?
  • 松灵Cobot Magic双臂具身遥操机器人(基于ROS的定位建图与协同导航技术)
  • 网工_DHCP协议
  • AI与思维模型【67】——元认知
  • 使用docker任意系统编译opengauss
  • Vue.js 入门教程
  • Spring 微服务解决了单体架构的哪些痛点?
  • 分布式入门
  • 七段码 路径压缩 并查集 dfs
  • 思维题专题
  • K8s-Pod详解
  • 第一讲 生成式ai是什么
  • 头歌java课程实验(函数式接口及lambda表达式)
  • 【AI论文】CLIMB:基于聚类的迭代数据混合自举语言模型预训练
  • 2026《数据结构》考研复习笔记四(第一章)
  • 单例模式与消费者生产者模型,以及线程池的基本认识与模拟实现
  • Java学习手册:Filter 和 Listener
  • synchronized 与分布式锁
  • 约束:常见约束(常见约束-例子,外键约束)
  • Laravel-vite+vue开发前端模板
  • 最新扣子空间实操指南
  • QML--全局对象Qt