From 713ac4d6e69c457dba862c4094a09c1e5cad251f Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Wed, 9 Apr 2025 08:32:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20temp=20token=20=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=89=8D=E7=BC=80=E9=95=BF=E5=BA=A6=E9=99=90?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/dev33/satoken/temp/SaTempTemplate.java | 34 ++++++++++++++++--- .../cn/dev33/satoken/temp/SaTempUtil.java | 15 ++++++++ 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempTemplate.java b/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempTemplate.java index c1bd653d..0496db02 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempTemplate.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempTemplate.java @@ -17,6 +17,7 @@ package cn.dev33.satoken.temp; import cn.dev33.satoken.SaManager; import cn.dev33.satoken.dao.SaTokenDao; +import cn.dev33.satoken.exception.SaTokenException; import cn.dev33.satoken.session.SaSession; import cn.dev33.satoken.session.raw.SaRawSessionDelegator; import cn.dev33.satoken.strategy.SaStrategy; @@ -73,7 +74,7 @@ public class SaTempTemplate { String tempToken = createTempTokenValue(value); // 持久化映射关系 - _saveToken(tempToken, value, timeout); + saveToken(tempToken, value, timeout); // 记录索引 if(isRecordIndex) { @@ -86,6 +87,17 @@ public class SaTempTemplate { return tempToken; } + /** + * 保存 token + * @param token / + * @param value / + * @param timeout / + */ + public void saveToken(String token, Object value, long timeout) { + String key = splicingTempTokenSaveKey(token); + SaManager.getSaTokenDao().setObject(key, value, timeout); + } + /** * 创建一个 temp-token 值 * @@ -135,6 +147,11 @@ public class SaTempTemplate { /** * 解析 token 获取 value,并裁剪指定前缀,然后转换为指定类型 + *

+ * 请注意此方法在旧版本(<= v1.41.0) 时的三个参数为:service, token, class
+ * 新版本三个参数为:token, cutPrefix, class
+ * 请注意其中的逻辑变化 + *

* * @param token 指定 Token * @param cs 指定类型 @@ -151,6 +168,7 @@ public class SaTempTemplate { } // 如果符合前缀则裁剪并返回,如果不符合前缀则返回 null + checkCutPrefixLength(cutPrefix); String str = SaFoxUtil.valueToString(value); if(str.startsWith(cutPrefix)) { return SaFoxUtil.getValueByType(str.substring(cutPrefix.length()), cs); @@ -297,10 +315,6 @@ public class SaTempTemplate { String key = splicingTempTokenSaveKey(token); return SaManager.getSaTokenDao().getObject(key); } - protected void _saveToken(String token, Object value, long timeout) { - String key = splicingTempTokenSaveKey(token); - SaManager.getSaTokenDao().setObject(key, value, timeout); - } protected void _deleteToken(String token) { String key = splicingTempTokenSaveKey(token); SaManager.getSaTokenDao().deleteObject(key); @@ -314,6 +328,16 @@ public class SaTempTemplate { // -------- 其它 + /** + * 检查裁剪前缀长度 + * @param cutPrefix / + */ + protected static void checkCutPrefixLength(String cutPrefix) { + if(cutPrefix.length() >= 32) { + throw new SaTokenException("裁剪前缀长度必须小于 32 位"); + } + } + /** * 过期时间转 ttl (秒) 获取最大 ttl 值 * @param tempTokenTtlList / diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempUtil.java b/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempUtil.java index f8c51e54..e9de3c71 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempUtil.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempUtil.java @@ -58,6 +58,16 @@ public class SaTempUtil { return SaManager.getSaTempTemplate().createToken(value, timeout, isRecordIndex); } + /** + * 保存 token + * @param token / + * @param value / + * @param timeout / + */ + public static void saveToken(String token, Object value, long timeout) { + SaManager.getSaTempTemplate().saveToken(token, value, timeout); + } + // -------- 解析 /** @@ -83,6 +93,11 @@ public class SaTempUtil { /** * 解析 token 获取 value,并裁剪指定前缀,然后转换为指定类型 + *

+ * 请注意此方法在旧版本(<= v1.41.0) 时的三个参数为:service, token, class
+ * 新版本三个参数为:token, cutPrefix, class
+ * 请注意其中的逻辑变化 + *

* * @param token 指定 Token * @param cs 指定类型