From a59ee9408b0df8fbd2e56b6526a8eabd72659be9 Mon Sep 17 00:00:00 2001 From: shengzhang <2393584716@qq.com> Date: Sun, 27 Dec 2020 22:47:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0token=E4=B8=93=E6=9C=89sessio?= =?UTF-8?q?n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/dev33/satoken/stp/SaTokenInfo.java | 27 +++++++++- .../java/cn/dev33/satoken/stp/StpLogic.java | 51 ++++++++++++++++++- .../java/cn/dev33/satoken/stp/StpUtil.java | 20 ++++++++ sa-token-demo-springboot/pom.xml | 4 +- .../main/java/com/pj/test/TestController.java | 16 ++++++ 5 files changed, 114 insertions(+), 4 deletions(-) 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 b216f2b..17893b8 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 5d9c68f..0f5b633 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 70fbc2f..38b97ae 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 03008c7..37d083c 100644
--- a/sa-token-demo-springboot/pom.xml
+++ b/sa-token-demo-springboot/pom.xml
@@ -33,11 +33,11 @@
-
+