Skip to content

❤️ 踢人下线

踢人下线,强制注销

  • 踢人下线 : 不会清除 token ,而是给 token 打上 tag,再次访问时会提示被踢下线了
  • 强制注销 : 清除 token
  • StpUtil.kickout(账号id)
  • StpUtil.kickout(账号id,端) 下线 pc 端,还是 ……
  • StpUtil.kickoutByTokenValue(token) 指定 token 下线

❤️ 全局监听器

通过注册侦听器,你可以订阅一些关键性事件(用户登录、退出、被踢下线 ……)

  • 新建监听器,并注入到 IOC 容器中
java
/**
 * 安全领域 - SaToken 监听器的实现
 */
@Component
public class MySaTokenListener extends SaTokenListenerForSimple {

    /**
     * 每次登录时触发
     *
     * @param loginType  登录类型
     * @param loginId    userId
     * @param tokenValue token
     * @param loginModel 登录设备
     */
    public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginModel loginModel) {
	    ……
    }

    /**
     * 每次被踢下线时触发
     */
    public void doKickout(String loginType, Object loginId, String tokenValue) {
        System.out.println("---------- 自定义侦听器实现 doKickout");
    }

}

❤️ 三大作用域

  • SaStorage 请求作用域:存储的数据只在一次请求内有效
  • SaSession 会话作用域:存储的数据在一次会话范围内有效
  • SaApplication 全局作用域:存储的数据在全局范围内有效

SaStorage

[!quote] SaStorage SaStorage 中存储的数据与用户无关,类似于一个请求级别的键值对容器

  • SaStorage 中存储的数据只在一次请求范围内有效,请求结束后数据自动清除

Session

[!quote] Session

Session 是会话中专业的数据缓存组件,通过 Session 我们可以很方便的缓存一些高频读写数据,提高程序性能

Sa-Token Session 与 JSP 中的 HttpSession 不同:

  • Sa-Token 只在调用 StpUtil.login(id) 登录会话时才会产生 Session
  • 产生的 Session,是分配给账号 id 的,也就是说在 PC、APP 上登录的同一账号所得到的 Session 也是同一个
  • Sa-Token 支持 Cookie、Header、body 三个途径提交 Token,所以可以做到一个设备登录多个账号

Session 分类

Account-Session :以账号 id 为单位的 Session

  • SaSession StpUtil.getSession() 获取当前账号的 Account-Session
  • SaSession StpUtil.getSessionByLoginId(账号id) 获取指定账号的 Account-Session
java
SaSession session = StpUtil.getSession();

// 从 Account-Session 中读取、写入数据 
session.set("name", "张三");
session.get("name");

Token-Session :以 token 为单位的 Session。token 续签,则 Account-Session、Token-Session 都会被续签

  • StpUtil.getTokenSession()
  • StpUtil.getTokenSessionByToken(token) 获取指定 token 的 session

Custom-Session :是一种自定义 Session,只要两个自定义 Session 的 id 一致,它们就是同一个 Session

SaSession 对象

#问题 理论最大可以支持多少个 session

SaApplication

[!quote] SaApplication SaApplication 是应用级别的,和是否登录也无关

  • SaApplication 存储的数据在全局范围内有效,应用关闭后数据自动清除

❤️ 缓存层扩展

缓存层扩展可以有很多选择,只需引入依赖即可,api 无需更改

  • 整合 redisson 将数据放到 redis 中
xml
<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-redisson-spring-boot-starter</artifactId>
    <version>1.42.0</version>
</dependency>