diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaTokenInfo.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaTokenInfo.java index b216f2b0..17893b86 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaTokenInfo.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaTokenInfo.java @@ -28,6 +28,13 @@ public class SaTokenInfo { /** session剩余有效时间 (单位: 秒) */ public long sessionTimeout; + /** token专属session剩余有效时间 (单位: 秒) */ + public long tokenSessionTimeout; + + + + + /** * token剩余无操作有效时间 */ @@ -146,6 +153,21 @@ public class SaTokenInfo { return this; } + /** + * @return tokenSessionTimeout + */ + public long getTokenSessionTimeout() { + return tokenSessionTimeout; + } + + /** + * @param tokenSessionTimeout 要设置的 tokenSessionTimeout + */ + public SaTokenInfo setTokenSessionTimeout(long tokenSessionTimeout) { + this.tokenSessionTimeout = tokenSessionTimeout; + return this; + } + /** * @return tokenActivityTimeout */ @@ -169,8 +191,11 @@ public class SaTokenInfo { public String toString() { return "SaTokenInfo [tokenName=" + tokenName + ", tokenValue=" + tokenValue + ", isLogin=" + isLogin + ", loginId=" + loginId + ", loginKey=" + loginKey + ", tokenTimeout=" + tokenTimeout - + ", sessionTimeout=" + sessionTimeout + ", tokenActivityTimeout=" + tokenActivityTimeout + "]"; + + ", sessionTimeout=" + sessionTimeout + ", tokenSessionTimeout=" + tokenSessionTimeout + + ", tokenActivityTimeout=" + tokenActivityTimeout + "]"; } + + 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 5d9c68f8..0f5b633c 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 @@ -119,6 +119,7 @@ public class StpLogic { info.loginKey = getLoginKey(); info.tokenTimeout = getTokenTimeout(); info.sessionTimeout = getSessionTimeout(); + info.tokenSessionTimeout = getTokenSessionTimeout(); info.tokenActivityTimeout = getTokenActivityTimeout(); return info; } @@ -382,7 +383,7 @@ public class StpLogic { * @param isCreate 是否新建 * @return session对象 */ - protected SaSession getSessionBySessionId(String sessionId, boolean isCreate) { + public SaSession getSessionBySessionId(String sessionId, boolean isCreate) { SaSession session = SaTokenManager.getSaTokenDao().getSession(sessionId); if(session == null && isCreate) { session = new SaSession(sessionId); @@ -427,6 +428,27 @@ public class StpLogic { return getSession(true); } + // ---------- token专属session + + /** + * 获取指定token的专属session,如果session尚未创建,则新建并返回 + * @param tokenValue token值 + * @return session会话 + */ + public SaSession getTokenSessionByToken(String tokenValue) { + return getSessionBySessionId(getKeyTokenSession(tokenValue), true); + } + + /** + * 获取当前token的专属-session,如果session尚未创建,则新建并返回 + *
只有当前会话属于登录状态才可调用 + * @return session会话 + */ + public SaSession getTokenSession() { + checkLogin(); + return getTokenSessionByToken(getTokenValue()); + } + // =================== [临时过期] 验证相关 =================== @@ -555,6 +577,24 @@ public class StpLogic { return SaTokenManager.getSaTokenDao().getSessionTimeout(getKeySession(loginId)); } + /** + * 获取当前token的专属Session剩余有效时间 (单位: 秒) + * @return token剩余有效时间 + */ + public long getTokenSessionTimeout() { + return getTokenSessionTimeoutByTokenValue(getTokenValue()); + } + + /** + * 获取指定token的专属Session剩余有效时间 (单位: 秒) + * @param tokenValue 指定token + * @return token剩余有效时间 + */ + public long getTokenSessionTimeoutByTokenValue(String tokenValue) { + return SaTokenManager.getSaTokenDao().getSessionTimeout(getKeyTokenSession(tokenValue)); + } + + /** * 获取当前token[临时过期]剩余有效时间 (单位: 秒) * @return token[临时过期]剩余有效时间 @@ -596,6 +636,7 @@ public class StpLogic { return timeout; } + // =================== 权限验证操作 =================== @@ -694,6 +735,14 @@ public class StpLogic { public String getKeySession(Object loginId) { return SaTokenManager.getConfig().getTokenName() + ":" + loginKey + ":session:" + loginId; } + /** + * 获取key: tokenValue的专属session + * @param tokenValue token值 + * @return key + */ + public String getKeyTokenSession(String tokenValue) { + return SaTokenManager.getConfig().getTokenName() + ":" + loginKey + ":token-session:" + tokenValue; + } /** * 获取key: 指定token的最后操作时间 持久化 * @param tokenValue token值 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 70fbc2f9..38b97aec 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 @@ -207,6 +207,26 @@ public class StpUtil { return stpLogic.getSession(); } + // ---------- token专属session + + /** + * 获取指定token的专属session,如果session尚未创建,则新建并返回 + * @param tokenValue token值 + * @return session会话 + */ + public static SaSession getTokenSessionByToken(String tokenValue) { + return stpLogic.getTokenSessionByToken(tokenValue); + } + + /** + * 获取当前token的专属-session,如果session尚未创建,则新建并返回 + *
只有当前会话属于登录状态才可调用
+ * @return session会话
+ */
+ public static SaSession getTokenSession() {
+ return stpLogic.getTokenSession();
+ }
+
// =================== [临时过期] 验证相关 ===================
diff --git a/sa-token-demo-springboot/pom.xml b/sa-token-demo-springboot/pom.xml
index 03008c76..37d083c3 100644
--- a/sa-token-demo-springboot/pom.xml
+++ b/sa-token-demo-springboot/pom.xml
@@ -33,11 +33,11 @@
-
+