mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-06-28 13:34:18 +08:00
feat: temp token 模块增加前缀长度限制
This commit is contained in:
parent
9ecaf72e9f
commit
713ac4d6e6
@ -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,并裁剪指定前缀,然后转换为指定类型
|
||||
* <h2>
|
||||
* 请注意此方法在旧版本(<= v1.41.0) 时的三个参数为:service, token, class <br/>
|
||||
* 新版本三个参数为:token, cutPrefix, class <br/>
|
||||
* 请注意其中的逻辑变化
|
||||
* </h2>
|
||||
*
|
||||
* @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 /
|
||||
|
@ -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,并裁剪指定前缀,然后转换为指定类型
|
||||
* <h2>
|
||||
* 请注意此方法在旧版本(<= v1.41.0) 时的三个参数为:service, token, class <br/>
|
||||
* 新版本三个参数为:token, cutPrefix, class <br/>
|
||||
* 请注意其中的逻辑变化
|
||||
* </h2>
|
||||
*
|
||||
* @param token 指定 Token
|
||||
* @param cs 指定类型
|
||||
|
Loading…
Reference in New Issue
Block a user