sa-token/sa-token-doc/doc/fun/token-timeout.md

2.5 KiB
Raw Blame History

token有效期详解

sa-token 提供两种token自动过期策略分别是timeoutactivity-timeout,其详细用法如下:

timeout

  1. timeout代表token的长久有效期单位/秒,例如将其配置为2592000(30天)代表在30天后token必定过期无法继续使用
  2. timeout无法续签,想要继续使用必须重新登录
  3. timeout的值配置为-1后代表永久有效不会过期

activity-timeout

  1. activity-timeout代表临时有效期,单位/秒,例如将其配置为1800(30分钟)代表用户如果30分钟无操作则此token会立即过期
  2. 如果在30分钟内用户有操作则会再次续签30分钟用户如果一直操作则会一直续签直到连续30分钟无操作token才会过期
  3. activity-timeout的值配置为-1后代表永久有效不会过期此时也无需频繁续签

关于activity-timeout的续签

如果activity-timeout配置了大于零的值,sa-token会在登录时开始计时,在每次直接或间接调用getLoginId()时进行一次过期检查与续签操作。 此时会有两种情况:

  1. 一种是会话无操作时间太长token已经过期此时框架会抛出NotLoginException异常(场景值=-3)
  2. 另一种则是会话在activity-timeout有效期内通过检查此时token可以成功续签

我可以手动续签吗?

可以! 如果框架的自动续签算法无法满足您的业务需求,你可以进行手动续签,sa-token提供两个API供你操作

  1. StpUtil.checkActivityTimeout(): 检查当前token 是否已经[临时过期],如果已经过期则抛出异常
  2. StpUtil.updateLastActivityToNow(): 续签当前token(将 [最后操作时间] 更新为当前时间戳)

注意在手动续签时即时token已经 [临时过期] 也可续签成功如果此场景下需要提示续签失败可采用先检查再续签的形式保证token有效性

例如以下代码:

	// 先检查是否已过期
	StpUtil.checkActivityTimeout();
	// 检查通过后继续续签
	StpUtil.updateLastActivityToNow();

同时,你还可以关闭框架的自动续签(在配置文件中配置 autoRenew=false ),此时续签操作完全由开发者控制,框架不再自动进行任何续签操作

timeout与activity-timeout可以同时使用吗

可以同时使用! 两者的认证逻辑彼此独立,互不干扰,可以同时使用。