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 指定类型