From 36afaf74d3f81aeca12ac9f25576c778f5fd8edb Mon Sep 17 00:00:00 2001 From: shengzhang <2393584716@qq.com> Date: Mon, 22 Mar 2021 00:04:05 +0800 Subject: [PATCH] =?UTF-8?q?token=E5=89=8D=E7=BC=80=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=BC=BA=E5=88=B6=E6=A8=A1=E5=BC=8F=EF=BC=8C?= =?UTF-8?q?=E5=A6=82=E6=9E=9C=E9=85=8D=E7=BD=AE=E4=BA=86=E5=89=8D=E7=BC=80?= =?UTF-8?q?=EF=BC=8C=E5=88=99=E5=89=8D=E7=AB=AF=E6=8F=90=E4=BA=A4token?= =?UTF-8?q?=E6=97=B6=E5=BF=85=E9=A1=BB=E5=B8=A6=E6=9C=89=E5=89=8D=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/dev33/satoken/session/SaSession.java | 10 ++++++++++ .../java/cn/dev33/satoken/stp/StpLogic.java | 20 ++++++++++++++----- .../cn/dev33/satoken/util/SaTokenConsts.java | 11 ++++++++-- .../main/java/com/pj/test/TestController.java | 1 - .../src/main/resources/application.yml | 1 - 5 files changed, 34 insertions(+), 9 deletions(-) diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java index 448c3bf2..cd32a021 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java @@ -283,6 +283,16 @@ public class SaSession implements Serializable { SaTokenManager.getSaTokenDao().updateSessionTimeout(this.id, minTimeout); } } + + /** + * 修改此Session的最大剩余存活时间 (只有在Session的过期时间高于指定的maxTimeout时才会进行修改) + * @param maxTimeout 过期时间 (单位: 秒) + */ + public void updateMaxTimeout(long maxTimeout) { + if(getTimeout() > maxTimeout) { + SaTokenManager.getSaTokenDao().updateSessionTimeout(this.id, maxTimeout); + } + } 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 dff30451..c02e7741 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 @@ -92,11 +92,19 @@ public class StpLogic { * @param tokenValue token值 */ public void setTokenValue(String tokenValue, int cookieTimeout){ + SaTokenConfig config = getConfig(); // 将token保存到本次request里 HttpServletRequest request = SaTokenManager.getSaTokenServlet().getRequest(); - request.setAttribute(splicingKeyJustCreatedSave(), tokenValue); + // 判断是否配置了token前缀 + String tokenPrefix = config.getTokenPrefix(); + if(SaTokenInsideUtil.isEmpty(tokenPrefix)) { + request.setAttribute(splicingKeyJustCreatedSave(), tokenValue); + } else { + // 如果配置了token前缀,则拼接上前缀一起写入 + request.setAttribute(splicingKeyJustCreatedSave(), tokenPrefix + SaTokenConsts.TOKEN_CONNECTOR_CHAT + tokenValue); + } + // 注入Cookie - SaTokenConfig config = getConfig(); if(config.getIsReadCookie() == true){ HttpServletResponse response = SaTokenManager.getSaTokenServlet().getResponse(); SaTokenManager.getSaTokenCookie().addCookie(response, getTokenName(), tokenValue, @@ -138,9 +146,11 @@ public class StpLogic { // 5. 如果打开了前缀模式 String tokenPrefix = getConfig().getTokenPrefix(); if(SaTokenInsideUtil.isEmpty(tokenPrefix) == false && SaTokenInsideUtil.isEmpty(tokenValue) == false) { - // 如果token以指定的前缀开头, 则裁剪掉它 - if(tokenValue.startsWith(tokenPrefix + " ")) { - tokenValue = tokenValue.substring(tokenPrefix.length() + 1); + // 如果token以指定的前缀开头, 则裁剪掉它, 否则视为未提供token + if(tokenValue.startsWith(tokenPrefix + SaTokenConsts.TOKEN_CONNECTOR_CHAT)) { + tokenValue = tokenValue.substring(tokenPrefix.length() + SaTokenConsts.TOKEN_CONNECTOR_CHAT.length()); + } else { + tokenValue = null; } } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/util/SaTokenConsts.java b/sa-token-core/src/main/java/cn/dev33/satoken/util/SaTokenConsts.java index 68cc4ccb..304fb321 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/util/SaTokenConsts.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/util/SaTokenConsts.java @@ -42,8 +42,8 @@ public class SaTokenConsts { * 常量key标记: 在进行临时身份切换时使用的key */ public static final String SWITCH_TO_SAVE_KEY = "SWITCH_TO_SAVE_KEY_"; - - + + // =================== token-style 相关 =================== /** @@ -75,6 +75,13 @@ public class SaTokenConsts { * token风格: tik风格 (2_14_16) */ public static final String TOKEN_STYLE_RANDOM_TIK = "tik"; + + // =================== 其它 =================== + + /** + * 连接token前缀和token值的字符 + */ + public static final String TOKEN_CONNECTOR_CHAT = " "; } 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 294a6a99..ce27d2b5 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 @@ -248,7 +248,6 @@ public class TestController { // .setIsLastingCookie(true) // 是否为持久Cookie(临时Cookie在浏览器关闭时会自动删除,持久Cookie在重新打开后依然存在) // .setTimeout(60 * 60 * 24 * 7) // 指定此次登录token的有效期, 单位:秒 (如未指定,自动取全局配置的timeout值) // ); - StpUtil.getTokenSession(); return AjaxJson.getSuccess("访问成功"); } diff --git a/sa-token-demo-springboot/src/main/resources/application.yml b/sa-token-demo-springboot/src/main/resources/application.yml index e02a9df0..0ee1952f 100644 --- a/sa-token-demo-springboot/src/main/resources/application.yml +++ b/sa-token-demo-springboot/src/main/resources/application.yml @@ -19,7 +19,6 @@ spring: token-style: uuid - # redis配置 redis: # Redis数据库索引(默认为0)