mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-10-21 11:07:23 +08:00
refactor: 重构 sa-token-fastjson 插件
This commit is contained in:
@@ -120,11 +120,8 @@ public interface SaGetValueInterface {
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
default <T> T getModel(String key, Class<T> cs, Object defaultValue) {
|
||||
Object value = get(key);
|
||||
if(valueIsNull(value)) {
|
||||
return (T)defaultValue;
|
||||
}
|
||||
return SaFoxUtil.getValueByType(value, cs);
|
||||
T model = getModel(key, cs);
|
||||
return valueIsNull(model) ? (T)defaultValue : model;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -96,6 +96,14 @@ public interface SaTokenDao {
|
||||
*/
|
||||
Object getObject(String key);
|
||||
|
||||
/**
|
||||
* 获取 Object (指定反序列化类型),如无返空
|
||||
*
|
||||
* @param key 键名称
|
||||
* @return object
|
||||
*/
|
||||
<T> T getObject(String key, Class<T> classType);
|
||||
|
||||
/**
|
||||
* 写入 Object,并设定存活时间 (单位: 秒)
|
||||
*
|
||||
|
@@ -39,6 +39,12 @@ public class SaTokenDaoDefaultImpl implements SaTokenDaoByStringFollowObject {
|
||||
return timedCache.getObject(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> T getObject(String key, Class<T> classType){
|
||||
return (T) getObject(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setObject(String key, Object object, long timeout) {
|
||||
timedCache.setObject(key, object, timeout);
|
||||
|
@@ -39,6 +39,17 @@ public interface SaTokenDaoByObjectFollowString extends SaTokenDaoBySessionFollo
|
||||
return SaManager.getSaSerializerTemplate().stringToObject(jsonString);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 Object (指定反序列化类型),如无返空
|
||||
*
|
||||
* @param key 键名称
|
||||
* @return object
|
||||
*/
|
||||
default <T> T getObject(String key, Class<T> classType) {
|
||||
String jsonString = get(key);
|
||||
return SaManager.getSaSerializerTemplate().stringToObject(jsonString, classType);
|
||||
}
|
||||
|
||||
/**
|
||||
* 写入 Object,并设定存活时间 (单位: 秒)
|
||||
*
|
||||
|
@@ -17,6 +17,7 @@ package cn.dev33.satoken.dao.auto;
|
||||
|
||||
import cn.dev33.satoken.dao.SaTokenDao;
|
||||
import cn.dev33.satoken.session.SaSession;
|
||||
import cn.dev33.satoken.strategy.SaStrategy;
|
||||
|
||||
/**
|
||||
* SaTokenDao 次级实现:SaSession 读写跟随 Object 读写
|
||||
@@ -34,7 +35,7 @@ public interface SaTokenDaoBySessionFollowObject extends SaTokenDao {
|
||||
* @return SaSession
|
||||
*/
|
||||
default SaSession getSession(String sessionId) {
|
||||
return (SaSession)getObject(sessionId);
|
||||
return getObject(sessionId, SaStrategy.instance.sessionClassType);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -37,9 +37,21 @@ public interface SaJsonTemplate {
|
||||
* 反序列化:json 字符串 → 对象
|
||||
*
|
||||
* @param jsonStr /
|
||||
* @param type /
|
||||
* @return /
|
||||
* @param <T> /
|
||||
*/
|
||||
<T>T jsonToObject(String jsonStr, Class<T> type);
|
||||
|
||||
/**
|
||||
* 反序列化:json 字符串 → 对象 (自动判断类型)
|
||||
*
|
||||
* @param jsonStr /
|
||||
* @return /
|
||||
*/
|
||||
Object jsonToObject(String jsonStr);
|
||||
default Object jsonToObject(String jsonStr) {
|
||||
return jsonToObject(jsonStr, Object.class);
|
||||
};
|
||||
|
||||
/**
|
||||
* 反序列化:json 字符串 → Map
|
||||
@@ -47,6 +59,8 @@ public interface SaJsonTemplate {
|
||||
* @param jsonStr /
|
||||
* @return /
|
||||
*/
|
||||
Map<String, Object> jsonToMap(String jsonStr);
|
||||
default Map<String, Object> jsonToMap(String jsonStr) {
|
||||
return jsonToObject(jsonStr, Map.class);
|
||||
};
|
||||
|
||||
}
|
||||
|
@@ -42,6 +42,11 @@ public class SaJsonTemplateDefaultImpl implements SaJsonTemplate {
|
||||
throw new NotImplException(ERROR_MESSAGE).setCode(SaErrorCode.CODE_10003);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T jsonToObject(String jsonStr, Class<T> type) {
|
||||
throw new NotImplException(ERROR_MESSAGE).setCode(SaErrorCode.CODE_10003);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> jsonToMap(String jsonStr) {
|
||||
throw new NotImplException(ERROR_MESSAGE).setCode(SaErrorCode.CODE_10003);
|
||||
|
@@ -39,6 +39,21 @@ public interface SaSerializerTemplate {
|
||||
*/
|
||||
Object stringToObject(String str);
|
||||
|
||||
/**
|
||||
* 反序列化:字符串 → 对象 (指定类型)
|
||||
* <p>
|
||||
* 此方法目前仅为 json 序列化实现类 在 反序列化对象 传递类型信息
|
||||
* </p>
|
||||
*
|
||||
* @param str /
|
||||
* @return /
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
default <T> T stringToObject(String str, Class<T> type) {
|
||||
return (T)stringToObject(str);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* 序列化:对象 -> 字节数组
|
||||
*
|
||||
|
@@ -37,6 +37,11 @@ public class SaSerializerTemplateForJson implements SaSerializerTemplate {
|
||||
return SaManager.getSaJsonTemplate().jsonToObject(str);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T>T stringToObject(String str, Class<T> type) {
|
||||
return SaManager.getSaJsonTemplate().jsonToObject(str, type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] objectToBytes(Object obj) {
|
||||
throw new ApiDisabledException("json 序列化器不支持 Object -> byte[]");
|
||||
|
@@ -101,6 +101,11 @@ public final class SaStrategy {
|
||||
return new SaSession(sessionId);
|
||||
};
|
||||
|
||||
/**
|
||||
* 反序列化 SaSession 时默认指定的类型
|
||||
*/
|
||||
public volatile Class<? extends SaSession> sessionClassType = SaSession.class;
|
||||
|
||||
/**
|
||||
* 判断:集合中是否包含指定元素(模糊匹配)
|
||||
*/
|
||||
|
@@ -20,6 +20,7 @@ import cn.dev33.satoken.exception.SaTokenException;
|
||||
|
||||
import java.io.Console;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.net.URLDecoder;
|
||||
import java.net.URLEncoder;
|
||||
import java.text.SimpleDateFormat;
|
||||
@@ -376,6 +377,36 @@ public class SaFoxUtil {
|
||||
return (T)obj3;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 Map 转化为 Object
|
||||
* @param map /
|
||||
* @param clazz /
|
||||
* @return /
|
||||
* @param <T> /
|
||||
*/
|
||||
public static <T> T mapToObject(Map<String, Object> map, Class<T> clazz) {
|
||||
if(map == null) {
|
||||
return null;
|
||||
}
|
||||
if(clazz == Map.class) {
|
||||
return (T) map;
|
||||
}
|
||||
try {
|
||||
T obj = clazz.getDeclaredConstructor().newInstance();
|
||||
for (Field field : clazz.getDeclaredFields()) {
|
||||
String fieldName = field.getName();
|
||||
if (map.containsKey(fieldName)) {
|
||||
field.setAccessible(true);
|
||||
field.set(obj, map.get(fieldName));
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("转换失败: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 在url上拼接上kv参数并返回
|
||||
* @param url url
|
||||
|
Reference in New Issue
Block a user