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 @@ - + diff --git a/sa-token-demo-springboot/src/main/java/com/pj/test/TestController.java b/sa-token-demo-springboot/src/main/java/com/pj/test/TestController.java index f5505e0..db26d00 100644 --- a/sa-token-demo-springboot/src/main/java/com/pj/test/TestController.java +++ b/sa-token-demo-springboot/src/main/java/com/pj/test/TestController.java @@ -95,6 +95,22 @@ public class TestController { return AjaxJson.getSuccess(); } + // ---------- + // 测试token专属session, 浏览器访问: http://localhost:8081/test/getTokenSession + @RequestMapping("getTokenSession") + public AjaxJson getTokenSession() { + System.out.println("======================= 进入方法,测试会话session接口 ========================= "); + System.out.println("当前是否登录:" + StpUtil.isLogin()); + System.out.println("当前token专属session: " + StpUtil.getTokenSession().getId()); + + System.out.println("测试取值name:" + StpUtil.getTokenSession().getAttribute("name")); + StpUtil.getTokenSession().setAttribute("name", "张三"); // 写入一个值 + System.out.println("测试取值name:" + StpUtil.getTokenSession().getAttribute("name")); + + return AjaxJson.getSuccess(); + } + + // 打印当前token信息, 浏览器访问: http://localhost:8081/test/tokenInfo @RequestMapping("tokenInfo") public AjaxJson tokenInfo() { -- GitLab