新增登录时动态指定 active-timeout 能力

This commit is contained in:
click33
2023-06-06 06:18:52 +08:00
parent 48ba6da91a
commit 814a64907a
51 changed files with 835 additions and 475 deletions

View File

@@ -2,19 +2,19 @@
server:
port: 8081
# sa-token配置
# sa-token 配置
sa-token:
# token名称 (同时也是cookie名称)
# token 名称 (同时也是 cookie 名称)
token-name: satoken
# token有效期单位s 默认30天, -1代表永不过期
# token 有效期单位:秒) 默认30天-1 代表永久有效
timeout: 2592000
# token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
activity-timeout: -1
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
# token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
active-timeout: -1
# 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录
is-concurrent: true
# 在多人登录同一账号时是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
# 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token
is-share: true
# token风格
# token 风格默认可取值uuid、simple-uuid、random-32、random-64、random-128、tik
token-style: uuid
# jwt秘钥
jwt-secret-key: asdasdasifhueuiwyurfewbfjsdafjk

View File

@@ -41,8 +41,8 @@ public class SaTokenConfigTest {
config.setTimeout(100204);
Assertions.assertEquals(config.getTimeout(), 100204);
config.setActivityTimeout(1804);
Assertions.assertEquals(config.getActivityTimeout(), 1804);
config.setActiveTimeout(1804);
Assertions.assertEquals(config.getActiveTimeout(), 1804);
config.setIsConcurrent(false);
Assertions.assertEquals(config.getIsConcurrent(), false);
@@ -111,7 +111,7 @@ public class SaTokenConfigTest {
SaTokenConfig config = SaTokenConfigFactory.createConfig("sa-token2.properties");
Assertions.assertEquals(config.getTokenName(), "use-token");
Assertions.assertEquals(config.getTimeout(), 9000);
Assertions.assertEquals(config.getActivityTimeout(), 240);
Assertions.assertEquals(config.getActiveTimeout(), 240);
Assertions.assertEquals(config.getIsConcurrent(), false);
Assertions.assertEquals(config.getIsShare(), false);
Assertions.assertEquals(config.getIsLog(), true);

View File

@@ -45,7 +45,7 @@ public class TokenInfoTest {
info.setTokenTimeout(1800);
info.setSessionTimeout(120);
info.setTokenSessionTimeout(1800);
info.setTokenActivityTimeout(120);
info.setTokenActiveTimeout(120);
info.setLoginDevice("PC");
info.setTag("xxx");
@@ -57,7 +57,7 @@ public class TokenInfoTest {
Assertions.assertEquals(info.getTokenTimeout(), 1800);
Assertions.assertEquals(info.getSessionTimeout(), 120);
Assertions.assertEquals(info.getTokenSessionTimeout(), 1800);
Assertions.assertEquals(info.getTokenActivityTimeout(), 120);
Assertions.assertEquals(info.getTokenActiveTimeout(), 120);
Assertions.assertEquals(info.getLoginDevice(), "PC");
Assertions.assertEquals(info.getTag(), "xxx");

View File

@@ -75,7 +75,7 @@ public class BasicsTest {
@BeforeAll
public static void beforeClass() {
System.out.println("\n\n------------------------ 基础测试 star ...");
SaManager.getConfig().setActivityTimeout(180);
SaManager.getConfig().setActiveTimeout(180);
}
// 结束
@@ -710,20 +710,20 @@ public class BasicsTest {
Assertions.assertEquals(tokenSession.get("code"), "123456");
}
// 测试,临时过期
// 测试,token 最低活跃频率
@Test
public void testActivityTimeout() {
public void testActiveTimeout() {
// 登录
StpUtil.login(10001);
Assertions.assertNotNull(StpUtil.getTokenValue());
// 默认跟随全局 timeout
StpUtil.updateLastActivityToNow();
long activityTimeout = StpUtil.getTokenActivityTimeout();
Assertions.assertTrue(activityTimeout <=180 || activityTimeout >=179);
StpUtil.updateLastActiveToNow();
long activeTimeout = StpUtil.getTokenActiveTimeout();
Assertions.assertTrue(activeTimeout <=180 || activeTimeout >=179);
// 不会抛出异常
Assertions.assertDoesNotThrow(() -> StpUtil.checkActivityTimeout());
Assertions.assertDoesNotThrow(() -> StpUtil.checkActiveTimeout());
}
// 测试,上下文 API

View File

@@ -1,12 +1,12 @@
# token名称 (同时也是cookie名称)
# token 名称 (同时也是 cookie 名称)
tokenName=use-token
# token有效期单位s 默认30天, -1代表永不过期
# token 有效期单位:秒) 默认30天-1 代表永久有效
timeout=9000
# token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
activityTimeout=240
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) =-1
# token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
activeTimeout=240
# 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录
isConcurrent=false
# 在多人登录同一账号时是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
# 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token
isShare=false
# token风格
isLog=true
# 是否输出操作日志
isLog=true