diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java index 340c9907..2e6fc52d 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java @@ -1617,13 +1617,12 @@ public class StpLogic { String key = splicingKeyLastActiveTime(tokenValue); String lastActiveTimeString = getSaTokenDao().get(key); - // 2、如果查不到,返回-2 if(lastActiveTimeString == null) { return SaTokenDao.NOT_VALUE_EXPIRE; } - // 3、计算最后活跃时间 距离 此时此刻 的时间差 + // 3、计算最后活跃时间 距离 此时此刻 的时间差 // 计算公式为: (当前时间 - 最后活跃时间) / 1000 SaValue2Box box = new SaValue2Box(lastActiveTimeString); long lastActiveTime = box.getValue1AsLong(); @@ -1631,6 +1630,10 @@ public class StpLogic { long timeDiff = (System.currentTimeMillis() - lastActiveTime) / 1000; // 该 token 允许的时间差 long allowTimeDiff = getTokenUseActiveTimeoutOrGlobalConfig(tokenValue); + if(allowTimeDiff == SaTokenDao.NEVER_EXPIRE) { + // 如果允许的时间差为 -1 ,则代表永不冻结,此处需要立即返回 -1 ,无需后续计算 + return SaTokenDao.NEVER_EXPIRE; + } // 4、校验这个时间差是否超过了允许的值 // 计算公式为: 允许的最大时间差 - 实际时间差,判断是否 < 0, 如果是则代表已经被冻结 ,返回-2 @@ -2783,7 +2786,8 @@ public class StpLogic { * @return / */ public boolean isOpenCheckActiveTimeout() { - return getConfigOrGlobal().getActiveTimeout() != SaTokenDao.NEVER_EXPIRE; + SaTokenConfig cfg = getConfigOrGlobal(); + return cfg.getActiveTimeout() != SaTokenDao.NEVER_EXPIRE || cfg.getDynamicActiveTimeout(); } /** diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java index 05275467..57334edd 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java @@ -21,7 +21,6 @@ import cn.dev33.satoken.listener.SaTokenEventCenter; import cn.dev33.satoken.session.SaSession; import cn.dev33.satoken.session.TokenSign; -import java.util.Collections; import java.util.List; /** diff --git a/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/test/TestController.java b/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/test/TestController.java index 8e5be6a0..5dd97ced 100644 --- a/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/test/TestController.java +++ b/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/test/TestController.java @@ -4,7 +4,6 @@ import cn.dev33.satoken.stp.SaLoginConfig; import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.util.SaFoxUtil; import cn.dev33.satoken.util.SaResult; -import com.pj.satoken.StpUserUtil; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @@ -23,7 +22,7 @@ public class TestController { // 测试登录 ---- http://localhost:8081/test/login @RequestMapping("login") public SaResult login(@RequestParam(defaultValue = "10001") long id) { - StpUtil.login(id, SaLoginConfig.setActiveTimeout(1000)); + StpUtil.login(id, SaLoginConfig.setActiveTimeout(-1)); return SaResult.ok("登录成功"); } @@ -31,7 +30,7 @@ public class TestController { @RequestMapping("test") public SaResult test() { System.out.println("------------进来了 " + SaFoxUtil.formatDate(new Date())); - StpUserUtil.login(10001, SaLoginConfig.setActiveTimeout(2000)); + StpUtil.getLoginId(); // 返回 return SaResult.data(null); }