refactor: 重构 sa-token-fastjson2 插件

This commit is contained in:
click33
2025-02-26 06:21:42 +08:00
parent 03ad51ef7b
commit a5d8e071a7
4 changed files with 22 additions and 41 deletions

View File

@@ -62,7 +62,7 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-fastjson</artifactId> <artifactId>sa-token-fastjson2</artifactId>
<version>${sa-token.version}</version> <version>${sa-token.version}</version>
</dependency> </dependency>

View File

@@ -16,13 +16,10 @@
package cn.dev33.satoken.json; package cn.dev33.satoken.json;
import cn.dev33.satoken.session.SaSessionForFastjson2Customized;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import java.util.Map;
/** /**
* JSON 转换器, Fastjson 版实现 * JSON 转换器, Fastjson2 版实现
* *
* @author click33 * @author click33
* @since 1.34.0 * @since 1.34.0
@@ -41,17 +38,8 @@ public class SaJsonTemplateForFastjson2 implements SaJsonTemplate {
* 反序列化json 字符串 → 对象 * 反序列化json 字符串 → 对象
*/ */
@Override @Override
public Object jsonToObject(String jsonStr) { public <T>T jsonToObject(String jsonStr, Class<T> type) {
// TODO: 此处待更改,需要让其自动识别类型 return JSON.parseObject(jsonStr, type);
return JSON.parseObject(jsonStr, SaSessionForFastjson2Customized.class);
}
/**
* 反序列化json 字符串 → Map
*/
@Override
public Map<String, Object> jsonToMap(String jsonStr) {
return JSON.parseObject(jsonStr, Map.class);
} }
} }

View File

@@ -37,6 +37,8 @@ public class SaTokenPluginForFastjson2 implements SaTokenPlugin {
// 重写 SaSession 生成策略 // 重写 SaSession 生成策略
SaStrategy.instance.createSession = SaSessionForFastjson2Customized::new; SaStrategy.instance.createSession = SaSessionForFastjson2Customized::new;
// 指定 SaSession 类型
SaStrategy.instance.sessionClassType = SaSessionForFastjson2Customized.class;
} }

View File

@@ -17,9 +17,10 @@ package cn.dev33.satoken.session;
import cn.dev33.satoken.util.SaFoxUtil; import cn.dev33.satoken.util.SaFoxUtil;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
/** /**
* Fastjson2 定制版 SaSession重写类型转换API、忽略 timeout 字段的序列化 * Fastjson2 定制版 SaSession重写类型转换API
* *
* @author click33 * @author click33
* @since 1.34.0 * @since 1.34.0
@@ -48,35 +49,25 @@ public class SaSessionForFastjson2Customized extends SaSession {
* @param <T> 泛型 * @param <T> 泛型
* @param key key * @param key key
* @param cs 指定转换类型 * @param cs 指定转换类型
* @return 值 * @return 值
*/ */
@Override @Override
public <T> T getModel(String key, Class<T> cs) { public <T> T getModel(String key, Class<T> cs) {
if(SaFoxUtil.isBasicType(cs)) { // 如果是想取出为基础类型
return SaFoxUtil.getValueByType(get(key), cs);
}
return JSON.parseObject(getString(key), cs);
}
/**
* 取值 (指定转换类型, 并指定值为Null时返回的默认值)
* @param <T> 泛型
* @param key key
* @param cs 指定转换类型
* @param defaultValue 值为Null时返回的默认值
* @return 值
*/
@Override
@SuppressWarnings("unchecked")
public <T> T getModel(String key, Class<T> cs, Object defaultValue) {
Object value = get(key); Object value = get(key);
if(valueIsNull(value)) {
return (T)defaultValue;
}
if(SaFoxUtil.isBasicType(cs)) { if(SaFoxUtil.isBasicType(cs)) {
return SaFoxUtil.getValueByType(get(key), cs); return SaFoxUtil.getValueByType(value, cs);
}
// 为空提前返回
if(valueIsNull(value)) {
return null;
}
// 如果是 JSONObject 类型直接转,否则先转为 String 再转
if(value instanceof JSONObject) {
JSONObject jo = (JSONObject) value;
return jo.to(cs);
} else {
return JSON.parseObject(value.toString(), cs);
} }
return JSON.parseObject(getString(key), cs);
} }
} }