From 7c3febda6012b880ccaac28de8b8027965a1df5c Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Sat, 22 Feb 2025 02:56:49 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=20sa-token-fastj?= =?UTF-8?q?son=E3=80=81sa-token-fastjson2=20=E9=80=82=E9=85=8D=20SPI=20?= =?UTF-8?q?=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sa-token-bom/pom.xml | 14 +- sa-token-plugin/pom.xml | 4 +- sa-token-plugin/sa-token-alone-redis/pom.xml | 6 +- .../.gitignore | 0 .../pom.xml | 9 +- .../json/SaJsonTemplateForFastjson.java | 56 ++++ .../satoken/plugin/SaTokenPluginFastjson.java | 42 +++ .../SaSessionForFastjsonCustomized.java | 22 +- .../cn.dev33.satoken.plugin.SaTokenPlugin | 1 + .../.gitignore | 0 .../pom.xml | 9 +- .../json/SaJsonTemplateForFastjson2.java | 57 ++++ .../plugin/SaTokenPluginFastjson2.java | 43 +++ .../SaSessionForFastjson2Customized.java | 20 +- .../cn.dev33.satoken.plugin.SaTokenPlugin | 1 + .../SaJsonTemplateForJackson.java | 3 +- .../{impl => }/SaTokenPluginForJackson.java | 5 +- .../cn.dev33.satoken.plugin.SaTokenPlugin | 2 +- .../satoken/dao/SaTokenDaoRedisFastjson.java | 264 ------------------ .../main/resources/META-INF/spring.factories | 1 - ...ot.autoconfigure.AutoConfiguration.imports | 1 - .../satoken/dao/SaTokenDaoRedisFastjson2.java | 264 ------------------ .../main/resources/META-INF/spring.factories | 1 - ...ot.autoconfigure.AutoConfiguration.imports | 1 - 24 files changed, 223 insertions(+), 603 deletions(-) rename sa-token-plugin/{sa-token-redis-fastjson => sa-token-fastjson}/.gitignore (100%) rename sa-token-plugin/{sa-token-redis-fastjson => sa-token-fastjson}/pom.xml (70%) create mode 100644 sa-token-plugin/sa-token-fastjson/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForFastjson.java create mode 100644 sa-token-plugin/sa-token-fastjson/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginFastjson.java rename sa-token-plugin/{sa-token-redis-fastjson/src/main/java/cn/dev33/satoken/dao => sa-token-fastjson/src/main/java/cn/dev33/satoken/session}/SaSessionForFastjsonCustomized.java (81%) create mode 100644 sa-token-plugin/sa-token-fastjson/src/main/resources/META-INF/services/cn.dev33.satoken.plugin.SaTokenPlugin rename sa-token-plugin/{sa-token-redis-fastjson2 => sa-token-fastjson2}/.gitignore (100%) rename sa-token-plugin/{sa-token-redis-fastjson2 => sa-token-fastjson2}/pom.xml (70%) create mode 100644 sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForFastjson2.java create mode 100644 sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginFastjson2.java rename sa-token-plugin/{sa-token-redis-fastjson2/src/main/java/cn/dev33/satoken/dao => sa-token-fastjson2/src/main/java/cn/dev33/satoken/session}/SaSessionForFastjson2Customized.java (85%) create mode 100644 sa-token-plugin/sa-token-fastjson2/src/main/resources/META-INF/services/cn.dev33.satoken.plugin.SaTokenPlugin rename sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/{dao => json}/SaJsonTemplateForJackson.java (98%) rename sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/plugin/{impl => }/SaTokenPluginForJackson.java (86%) delete mode 100644 sa-token-plugin/sa-token-redis-fastjson/src/main/java/cn/dev33/satoken/dao/SaTokenDaoRedisFastjson.java delete mode 100644 sa-token-plugin/sa-token-redis-fastjson/src/main/resources/META-INF/spring.factories delete mode 100644 sa-token-plugin/sa-token-redis-fastjson/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports delete mode 100644 sa-token-plugin/sa-token-redis-fastjson2/src/main/java/cn/dev33/satoken/dao/SaTokenDaoRedisFastjson2.java delete mode 100644 sa-token-plugin/sa-token-redis-fastjson2/src/main/resources/META-INF/spring.factories delete mode 100644 sa-token-plugin/sa-token-redis-fastjson2/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports diff --git a/sa-token-bom/pom.xml b/sa-token-bom/pom.xml index 8d473089..c085d5eb 100644 --- a/sa-token-bom/pom.xml +++ b/sa-token-bom/pom.xml @@ -116,12 +116,17 @@ cn.dev33 - sa-token-redis-fastjson + sa-token-jackson ${revision} cn.dev33 - sa-token-redis-fastjson2 + sa-token-fastjson + ${revision} + + + cn.dev33 + sa-token-fastjson2 ${revision} @@ -194,11 +199,6 @@ sa-token-temp-jwt ${revision} - - cn.dev33 - sa-token-jackson - ${revision} - cn.dev33 sa-token-redis-template-jdk-serializer diff --git a/sa-token-plugin/pom.xml b/sa-token-plugin/pom.xml index 786d669b..62c1cab9 100644 --- a/sa-token-plugin/pom.xml +++ b/sa-token-plugin/pom.xml @@ -22,9 +22,9 @@ sa-token-redis-template sa-token-redis-template-jdk-serializer sa-token-redis-jackson + sa-token-fastjson + sa-token-fastjson2 - sa-token-redis-fastjson - sa-token-redis-fastjson2 sa-token-redisson-jackson sa-token-redisson-jackson2 sa-token-redisx diff --git a/sa-token-plugin/sa-token-alone-redis/pom.xml b/sa-token-plugin/sa-token-alone-redis/pom.xml index 7f9c5951..4ee80f60 100644 --- a/sa-token-plugin/sa-token-alone-redis/pom.xml +++ b/sa-token-plugin/sa-token-alone-redis/pom.xml @@ -25,17 +25,17 @@ cn.dev33 - sa-token-redis-jackson + sa-token-jackson true cn.dev33 - sa-token-redis-fastjson + sa-token-fastjson true cn.dev33 - sa-token-redis-fastjson2 + sa-token-fastjson2 true diff --git a/sa-token-plugin/sa-token-redis-fastjson/.gitignore b/sa-token-plugin/sa-token-fastjson/.gitignore similarity index 100% rename from sa-token-plugin/sa-token-redis-fastjson/.gitignore rename to sa-token-plugin/sa-token-fastjson/.gitignore diff --git a/sa-token-plugin/sa-token-redis-fastjson/pom.xml b/sa-token-plugin/sa-token-fastjson/pom.xml similarity index 70% rename from sa-token-plugin/sa-token-redis-fastjson/pom.xml rename to sa-token-plugin/sa-token-fastjson/pom.xml index e5cdb72c..b7b2abf6 100644 --- a/sa-token-plugin/sa-token-redis-fastjson/pom.xml +++ b/sa-token-plugin/sa-token-fastjson/pom.xml @@ -10,20 +10,13 @@ 4.0.0 - sa-token-redis-fastjson + sa-token-fastjson - cn.dev33 sa-token-core - - - org.springframework.boot - spring-boot-starter-data-redis - - com.alibaba fastjson diff --git a/sa-token-plugin/sa-token-fastjson/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForFastjson.java b/sa-token-plugin/sa-token-fastjson/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForFastjson.java new file mode 100644 index 00000000..1f4b0612 --- /dev/null +++ b/sa-token-plugin/sa-token-fastjson/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForFastjson.java @@ -0,0 +1,56 @@ +/* + * Copyright 2020-2099 sa-token.cc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.dev33.satoken.json; + +import cn.dev33.satoken.session.SaSessionForFastjsonCustomized; +import com.alibaba.fastjson.JSON; + +import java.util.Map; + +/** + * JSON 转换器, Fastjson 版实现 + * + * @author click33 + * @since 1.34.0 + */ +public class SaJsonTemplateForFastjson implements SaJsonTemplate { + + /** + * 序列化:对象 -> json 字符串 + */ + @Override + public String objectToJson(Object obj) { + return JSON.toJSONString(obj); + } + + /** + * 反序列化:json 字符串 → 对象 + */ + @Override + public Object jsonToObject(String jsonStr) { + // TODO: 此处待更改,需要让其自动识别类型 + return JSON.parseObject(jsonStr, SaSessionForFastjsonCustomized.class); + } + + /** + * 反序列化:json 字符串 → Map + */ + @Override + public Map jsonToMap(String jsonStr) { + return JSON.parseObject(jsonStr, Map.class); + } + +} diff --git a/sa-token-plugin/sa-token-fastjson/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginFastjson.java b/sa-token-plugin/sa-token-fastjson/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginFastjson.java new file mode 100644 index 00000000..ff40b972 --- /dev/null +++ b/sa-token-plugin/sa-token-fastjson/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginFastjson.java @@ -0,0 +1,42 @@ +/* + * Copyright 2020-2099 sa-token.cc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.dev33.satoken.plugin; + +import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.json.SaJsonTemplateForFastjson; +import cn.dev33.satoken.session.SaSessionForFastjsonCustomized; +import cn.dev33.satoken.strategy.SaStrategy; + +/** + * SaToken 插件安装:JSON 转换器 - Fastjson 版 + * + * @author click33 + * @since 1.41.0 + */ +public class SaTokenPluginFastjson implements SaTokenPlugin { + + @Override + public void setup() { + + // 设置JSON转换器:Fastjson 版 + SaManager.setSaJsonTemplate(new SaJsonTemplateForFastjson()); + + // 重写 SaSession 生成策略 + SaStrategy.instance.createSession = SaSessionForFastjsonCustomized::new; + + } + +} \ No newline at end of file diff --git a/sa-token-plugin/sa-token-redis-fastjson/src/main/java/cn/dev33/satoken/dao/SaSessionForFastjsonCustomized.java b/sa-token-plugin/sa-token-fastjson/src/main/java/cn/dev33/satoken/session/SaSessionForFastjsonCustomized.java similarity index 81% rename from sa-token-plugin/sa-token-redis-fastjson/src/main/java/cn/dev33/satoken/dao/SaSessionForFastjsonCustomized.java rename to sa-token-plugin/sa-token-fastjson/src/main/java/cn/dev33/satoken/session/SaSessionForFastjsonCustomized.java index 27415f15..d6b987b5 100644 --- a/sa-token-plugin/sa-token-redis-fastjson/src/main/java/cn/dev33/satoken/dao/SaSessionForFastjsonCustomized.java +++ b/sa-token-plugin/sa-token-fastjson/src/main/java/cn/dev33/satoken/session/SaSessionForFastjsonCustomized.java @@ -13,16 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package cn.dev33.satoken.dao; +package cn.dev33.satoken.session; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.annotation.JSONField; - -import cn.dev33.satoken.session.SaSession; import cn.dev33.satoken.util.SaFoxUtil; +import com.alibaba.fastjson.JSON; /** - * Fastjson 定制版 SaSession,重写类型转换API、忽略 timeout 字段的序列化 + * Fastjson 定制版 SaSession,重写类型转换API * * @author click33 * @since 1.34.0 @@ -31,10 +28,6 @@ public class SaSessionForFastjsonCustomized extends SaSession { private static final long serialVersionUID = -7600983549653130681L; - public SaSessionForFastjsonCustomized() { - super(); - } - /** * 构建一个 SaSession 对象 * @param id Session 的 id @@ -79,13 +72,4 @@ public class SaSessionForFastjsonCustomized extends SaSession { return JSON.parseObject(getString(key), cs); } - /** - * 忽略 timeout 字段的序列化 - */ - @Override - @JSONField(serialize = false) - public long timeout() { - return super.timeout(); - } - } diff --git a/sa-token-plugin/sa-token-fastjson/src/main/resources/META-INF/services/cn.dev33.satoken.plugin.SaTokenPlugin b/sa-token-plugin/sa-token-fastjson/src/main/resources/META-INF/services/cn.dev33.satoken.plugin.SaTokenPlugin new file mode 100644 index 00000000..1199cedf --- /dev/null +++ b/sa-token-plugin/sa-token-fastjson/src/main/resources/META-INF/services/cn.dev33.satoken.plugin.SaTokenPlugin @@ -0,0 +1 @@ +cn.dev33.satoken.plugin.SaTokenPluginFastjson \ No newline at end of file diff --git a/sa-token-plugin/sa-token-redis-fastjson2/.gitignore b/sa-token-plugin/sa-token-fastjson2/.gitignore similarity index 100% rename from sa-token-plugin/sa-token-redis-fastjson2/.gitignore rename to sa-token-plugin/sa-token-fastjson2/.gitignore diff --git a/sa-token-plugin/sa-token-redis-fastjson2/pom.xml b/sa-token-plugin/sa-token-fastjson2/pom.xml similarity index 70% rename from sa-token-plugin/sa-token-redis-fastjson2/pom.xml rename to sa-token-plugin/sa-token-fastjson2/pom.xml index 82d43bc1..0d526016 100644 --- a/sa-token-plugin/sa-token-redis-fastjson2/pom.xml +++ b/sa-token-plugin/sa-token-fastjson2/pom.xml @@ -10,20 +10,13 @@ 4.0.0 - sa-token-redis-fastjson2 + sa-token-fastjson2 - cn.dev33 sa-token-core - - - org.springframework.boot - spring-boot-starter-data-redis - - com.alibaba.fastjson2 fastjson2 diff --git a/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForFastjson2.java b/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForFastjson2.java new file mode 100644 index 00000000..97585766 --- /dev/null +++ b/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForFastjson2.java @@ -0,0 +1,57 @@ +/* + * Copyright 2020-2099 sa-token.cc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.dev33.satoken.json; + + +import cn.dev33.satoken.session.SaSessionForFastjson2Customized; +import com.alibaba.fastjson2.JSON; + +import java.util.Map; + +/** + * JSON 转换器, Fastjson 版实现 + * + * @author click33 + * @since 1.34.0 + */ +public class SaJsonTemplateForFastjson2 implements SaJsonTemplate { + + /** + * 序列化:对象 -> json 字符串 + */ + @Override + public String objectToJson(Object obj) { + return JSON.toJSONString(obj); + } + + /** + * 反序列化:json 字符串 → 对象 + */ + @Override + public Object jsonToObject(String jsonStr) { + // TODO: 此处待更改,需要让其自动识别类型 + return JSON.parseObject(jsonStr, SaSessionForFastjson2Customized.class); + } + + /** + * 反序列化:json 字符串 → Map + */ + @Override + public Map jsonToMap(String jsonStr) { + return JSON.parseObject(jsonStr, Map.class); + } + +} diff --git a/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginFastjson2.java b/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginFastjson2.java new file mode 100644 index 00000000..d84f8c28 --- /dev/null +++ b/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginFastjson2.java @@ -0,0 +1,43 @@ +/* + * Copyright 2020-2099 sa-token.cc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.dev33.satoken.plugin; + +import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.json.SaJsonTemplateForFastjson2; +import cn.dev33.satoken.session.SaSessionForFastjson2Customized; +import cn.dev33.satoken.strategy.SaStrategy; + +/** + * SaToken 插件安装:JSON 转换器 - Fastjson2 版 + * + * @author click33 + * @since 1.41.0 + */ +public class SaTokenPluginFastjson2 implements SaTokenPlugin { + + @Override + public void setup() { + + // 设置 JSON 转换器:Fastjson2 版 + SaManager.setSaJsonTemplate(new SaJsonTemplateForFastjson2()); + + // 重写 SaSession 生成策略 + SaStrategy.instance.createSession = SaSessionForFastjson2Customized::new; + + + } + +} \ No newline at end of file diff --git a/sa-token-plugin/sa-token-redis-fastjson2/src/main/java/cn/dev33/satoken/dao/SaSessionForFastjson2Customized.java b/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/session/SaSessionForFastjson2Customized.java similarity index 85% rename from sa-token-plugin/sa-token-redis-fastjson2/src/main/java/cn/dev33/satoken/dao/SaSessionForFastjson2Customized.java rename to sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/session/SaSessionForFastjson2Customized.java index 86609141..694c2653 100644 --- a/sa-token-plugin/sa-token-redis-fastjson2/src/main/java/cn/dev33/satoken/dao/SaSessionForFastjson2Customized.java +++ b/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/session/SaSessionForFastjson2Customized.java @@ -13,13 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package cn.dev33.satoken.dao; +package cn.dev33.satoken.session; -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.annotation.JSONField; - -import cn.dev33.satoken.session.SaSession; import cn.dev33.satoken.util.SaFoxUtil; +import com.alibaba.fastjson2.JSON; /** * Fastjson2 定制版 SaSession,重写类型转换API、忽略 timeout 字段的序列化 @@ -31,10 +28,6 @@ public class SaSessionForFastjson2Customized extends SaSession { private static final long serialVersionUID = -7600983549653130681L; - public SaSessionForFastjson2Customized() { - super(); - } - /** * 构建一个 SaSession 对象 * @param id Session 的 id @@ -79,13 +72,4 @@ public class SaSessionForFastjson2Customized extends SaSession { return JSON.parseObject(getString(key), cs); } - /** - * 忽略 timeout 字段的序列化 - */ - @Override - @JSONField(serialize = false) - public long timeout() { - return super.timeout(); - } - } diff --git a/sa-token-plugin/sa-token-fastjson2/src/main/resources/META-INF/services/cn.dev33.satoken.plugin.SaTokenPlugin b/sa-token-plugin/sa-token-fastjson2/src/main/resources/META-INF/services/cn.dev33.satoken.plugin.SaTokenPlugin new file mode 100644 index 00000000..f2234ee7 --- /dev/null +++ b/sa-token-plugin/sa-token-fastjson2/src/main/resources/META-INF/services/cn.dev33.satoken.plugin.SaTokenPlugin @@ -0,0 +1 @@ +cn.dev33.satoken.plugin.SaTokenPluginFastjson2 \ No newline at end of file diff --git a/sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/dao/SaJsonTemplateForJackson.java b/sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForJackson.java similarity index 98% rename from sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/dao/SaJsonTemplateForJackson.java rename to sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForJackson.java index 7a3125ac..d8823c32 100644 --- a/sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/dao/SaJsonTemplateForJackson.java +++ b/sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForJackson.java @@ -13,10 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package cn.dev33.satoken.dao; +package cn.dev33.satoken.json; import cn.dev33.satoken.exception.SaJsonConvertException; -import cn.dev33.satoken.json.SaJsonTemplate; import cn.dev33.satoken.util.SaFoxUtil; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/plugin/impl/SaTokenPluginForJackson.java b/sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginForJackson.java similarity index 86% rename from sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/plugin/impl/SaTokenPluginForJackson.java rename to sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginForJackson.java index a189e8d3..32ddc6cb 100644 --- a/sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/plugin/impl/SaTokenPluginForJackson.java +++ b/sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginForJackson.java @@ -13,11 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package cn.dev33.satoken.plugin.impl; +package cn.dev33.satoken.plugin; import cn.dev33.satoken.SaManager; -import cn.dev33.satoken.dao.SaJsonTemplateForJackson; -import cn.dev33.satoken.plugin.SaTokenPlugin; +import cn.dev33.satoken.json.SaJsonTemplateForJackson; /** * SaToken 插件:JSON 转换器安装 diff --git a/sa-token-plugin/sa-token-jackson/src/main/resources/META-INF/services/cn.dev33.satoken.plugin.SaTokenPlugin b/sa-token-plugin/sa-token-jackson/src/main/resources/META-INF/services/cn.dev33.satoken.plugin.SaTokenPlugin index 488ec78a..3e154517 100644 --- a/sa-token-plugin/sa-token-jackson/src/main/resources/META-INF/services/cn.dev33.satoken.plugin.SaTokenPlugin +++ b/sa-token-plugin/sa-token-jackson/src/main/resources/META-INF/services/cn.dev33.satoken.plugin.SaTokenPlugin @@ -1 +1 @@ -cn.dev33.satoken.plugin.impl.SaTokenPluginForJackson \ No newline at end of file +cn.dev33.satoken.plugin.SaTokenPluginForJackson \ No newline at end of file diff --git a/sa-token-plugin/sa-token-redis-fastjson/src/main/java/cn/dev33/satoken/dao/SaTokenDaoRedisFastjson.java b/sa-token-plugin/sa-token-redis-fastjson/src/main/java/cn/dev33/satoken/dao/SaTokenDaoRedisFastjson.java deleted file mode 100644 index bd999f8c..00000000 --- a/sa-token-plugin/sa-token-redis-fastjson/src/main/java/cn/dev33/satoken/dao/SaTokenDaoRedisFastjson.java +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright 2020-2099 sa-token.cc - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package cn.dev33.satoken.dao; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import java.util.concurrent.TimeUnit; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.data.redis.serializer.StringRedisSerializer; -import org.springframework.stereotype.Component; - -import com.alibaba.fastjson.JSON; - -import cn.dev33.satoken.session.SaSession; -import cn.dev33.satoken.strategy.SaStrategy; -import cn.dev33.satoken.util.SaFoxUtil; - -/** - * Sa-Token 持久层实现 [ Redis存储、fastjson序列化 ] - * - * @author sikadai - * @since 1.34.0 - */ -@Component -public class SaTokenDaoRedisFastjson implements SaTokenDao { - - /** - * String 读写专用 - */ - public StringRedisTemplate stringRedisTemplate; - - /** - * Object 读写专用 - */ - public StringRedisTemplate objectRedisTemplate; - - /** - * 标记:是否已初始化成功 - */ - public boolean isInit; - - @Autowired - public void init(RedisConnectionFactory connectionFactory) { - // 如果已经初始化成功了,就立刻退出,不重复初始化 - if(this.isInit) { - return; - } - - // 重写 SaSession 生成策略 - SaStrategy.instance.createSession = (sessionId) -> new SaSessionForFastjsonCustomized(sessionId); - - // 指定相应的序列化方案 - StringRedisSerializer keySerializer = new StringRedisSerializer(); - StringRedisSerializer valueSerializer = new StringRedisSerializer(); - - // 构建StringRedisTemplate - StringRedisTemplate stringTemplate = new StringRedisTemplate(); - stringTemplate.setConnectionFactory(connectionFactory); - stringTemplate.afterPropertiesSet(); - - // 构建RedisTemplate - StringRedisTemplate template = new StringRedisTemplate(); - template.setConnectionFactory(connectionFactory); - template.setKeySerializer(keySerializer); - template.setHashKeySerializer(keySerializer); - template.setValueSerializer(valueSerializer); - template.setHashValueSerializer(valueSerializer); - template.afterPropertiesSet(); - - // 开始初始化相关组件 - this.stringRedisTemplate = stringTemplate; - this.objectRedisTemplate = template; - - // 打上标记,表示已经初始化成功,后续无需再重新初始化 - this.isInit = true; - } - - - /** - * 获取Value,如无返空 - */ - @Override - public String get(String key) { - return stringRedisTemplate.opsForValue().get(key); - } - - /** - * 写入Value,并设定存活时间 (单位: 秒) - */ - @Override - public void set(String key, String value, long timeout) { - if(timeout == 0 || timeout <= SaTokenDao.NOT_VALUE_EXPIRE) { - return; - } - // 判断是否为永不过期 - if(timeout == SaTokenDao.NEVER_EXPIRE) { - stringRedisTemplate.opsForValue().set(key, value); - } else { - stringRedisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS); - } - } - - /** - * 修改指定key-value键值对 (过期时间不变) - */ - @Override - public void update(String key, String value) { - long expire = getTimeout(key); - // -2 = 无此键 - if(expire == SaTokenDao.NOT_VALUE_EXPIRE) { - return; - } - this.set(key, value, expire); - } - - /** - * 删除Value - */ - @Override - public void delete(String key) { - stringRedisTemplate.delete(key); - } - - /** - * 获取Value的剩余存活时间 (单位: 秒) - */ - @Override - public long getTimeout(String key) { - return stringRedisTemplate.getExpire(key); - } - - /** - * 修改Value的剩余存活时间 (单位: 秒) - */ - @Override - public void updateTimeout(String key, long timeout) { - // 判断是否想要设置为永久 - if(timeout == SaTokenDao.NEVER_EXPIRE) { - long expire = getTimeout(key); - if(expire == SaTokenDao.NEVER_EXPIRE) { - // 如果其已经被设置为永久,则不作任何处理 - } else { - // 如果尚未被设置为永久,那么再次set一次 - this.set(key, this.get(key), timeout); - } - return; - } - stringRedisTemplate.expire(key, timeout, TimeUnit.SECONDS); - } - - - /** - * 获取Object,如无返空 - */ - @Override - public Object getObject(String key) { - return objectRedisTemplate.opsForValue().get(key); - } - - @Override - public SaSession getSession(String sessionId) { - Object obj = getObject(sessionId); - if (obj == null) { - return null; - } - return JSON.parseObject(obj.toString(), SaSessionForFastjsonCustomized.class); - } - - /** - * 写入Object,并设定存活时间 (单位: 秒) - */ - @Override - public void setObject(String key, Object object, long timeout) { - if(timeout == 0 || timeout <= SaTokenDao.NOT_VALUE_EXPIRE) { - return; - } - String toValue = JSON.toJSONString(object); - // 判断是否为永不过期 - if(timeout == SaTokenDao.NEVER_EXPIRE) { - objectRedisTemplate.opsForValue().set(key, toValue); - } else { - objectRedisTemplate.opsForValue().set(key, toValue, timeout, TimeUnit.SECONDS); - } - } - - /** - * 更新Object (过期时间不变) - */ - @Override - public void updateObject(String key, Object object) { - long expire = getObjectTimeout(key); - // -2 = 无此键 - if(expire == SaTokenDao.NOT_VALUE_EXPIRE) { - return; - } - this.setObject(key, object, expire); - } - - /** - * 删除Object - */ - @Override - public void deleteObject(String key) { - objectRedisTemplate.delete(key); - } - - /** - * 获取Object的剩余存活时间 (单位: 秒) - */ - @Override - public long getObjectTimeout(String key) { - return objectRedisTemplate.getExpire(key); - } - - /** - * 修改Object的剩余存活时间 (单位: 秒) - */ - @Override - public void updateObjectTimeout(String key, long timeout) { - // 判断是否想要设置为永久 - if(timeout == SaTokenDao.NEVER_EXPIRE) { - long expire = getObjectTimeout(key); - if(expire == SaTokenDao.NEVER_EXPIRE) { - // 如果其已经被设置为永久,则不作任何处理 - } else { - // 如果尚未被设置为永久,那么再次set一次 - this.setObject(key, this.getObject(key), timeout); - } - return; - } - objectRedisTemplate.expire(key, timeout, TimeUnit.SECONDS); - } - - - - /** - * 搜索数据 - */ - @Override - public List searchData(String prefix, String keyword, int start, int size, boolean sortType) { - Set keys = stringRedisTemplate.keys(prefix + "*" + keyword + "*"); - List list = new ArrayList<>(keys); - return SaFoxUtil.searchList(list, start, size, sortType); - } - - -} diff --git a/sa-token-plugin/sa-token-redis-fastjson/src/main/resources/META-INF/spring.factories b/sa-token-plugin/sa-token-redis-fastjson/src/main/resources/META-INF/spring.factories deleted file mode 100644 index b88e60f8..00000000 --- a/sa-token-plugin/sa-token-redis-fastjson/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.dev33.satoken.dao.SaTokenDaoRedisFastjson \ No newline at end of file diff --git a/sa-token-plugin/sa-token-redis-fastjson/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/sa-token-plugin/sa-token-redis-fastjson/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 55cfbd45..00000000 --- a/sa-token-plugin/sa-token-redis-fastjson/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -cn.dev33.satoken.dao.SaTokenDaoRedisFastjson \ No newline at end of file diff --git a/sa-token-plugin/sa-token-redis-fastjson2/src/main/java/cn/dev33/satoken/dao/SaTokenDaoRedisFastjson2.java b/sa-token-plugin/sa-token-redis-fastjson2/src/main/java/cn/dev33/satoken/dao/SaTokenDaoRedisFastjson2.java deleted file mode 100644 index e53944db..00000000 --- a/sa-token-plugin/sa-token-redis-fastjson2/src/main/java/cn/dev33/satoken/dao/SaTokenDaoRedisFastjson2.java +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright 2020-2099 sa-token.cc - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package cn.dev33.satoken.dao; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import java.util.concurrent.TimeUnit; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.data.redis.serializer.StringRedisSerializer; -import org.springframework.stereotype.Component; - -import com.alibaba.fastjson2.JSON; - -import cn.dev33.satoken.session.SaSession; -import cn.dev33.satoken.strategy.SaStrategy; -import cn.dev33.satoken.util.SaFoxUtil; - -/** - * Sa-Token 持久层实现 [ Redis存储、fastjson2序列化 ] - * - * @author sikadai - * @since 1.34.0 - */ -@Component -public class SaTokenDaoRedisFastjson2 implements SaTokenDao { - - /** - * String 读写专用 - */ - public StringRedisTemplate stringRedisTemplate; - - /** - * Object 读写专用 - */ - public StringRedisTemplate objectRedisTemplate; - - /** - * 标记:是否已初始化成功 - */ - public boolean isInit; - - @Autowired - public void init(RedisConnectionFactory connectionFactory) { - // 如果已经初始化成功了,就立刻退出,不重复初始化 - if(this.isInit) { - return; - } - - // 重写 SaSession 生成策略 - SaStrategy.instance.createSession = (sessionId) -> new SaSessionForFastjson2Customized(sessionId); - - // 指定相应的序列化方案 - StringRedisSerializer keySerializer = new StringRedisSerializer(); - StringRedisSerializer valueSerializer = new StringRedisSerializer(); - - // 构建StringRedisTemplate - StringRedisTemplate stringTemplate = new StringRedisTemplate(); - stringTemplate.setConnectionFactory(connectionFactory); - stringTemplate.afterPropertiesSet(); - - // 构建RedisTemplate - StringRedisTemplate template = new StringRedisTemplate(); - template.setConnectionFactory(connectionFactory); - template.setKeySerializer(keySerializer); - template.setHashKeySerializer(keySerializer); - template.setValueSerializer(valueSerializer); - template.setHashValueSerializer(valueSerializer); - template.afterPropertiesSet(); - - // 开始初始化相关组件 - this.stringRedisTemplate = stringTemplate; - this.objectRedisTemplate = template; - - // 打上标记,表示已经初始化成功,后续无需再重新初始化 - this.isInit = true; - } - - - /** - * 获取Value,如无返空 - */ - @Override - public String get(String key) { - return stringRedisTemplate.opsForValue().get(key); - } - - /** - * 写入Value,并设定存活时间 (单位: 秒) - */ - @Override - public void set(String key, String value, long timeout) { - if(timeout == 0 || timeout <= SaTokenDao.NOT_VALUE_EXPIRE) { - return; - } - // 判断是否为永不过期 - if(timeout == SaTokenDao.NEVER_EXPIRE) { - stringRedisTemplate.opsForValue().set(key, value); - } else { - stringRedisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS); - } - } - - /** - * 修改指定key-value键值对 (过期时间不变) - */ - @Override - public void update(String key, String value) { - long expire = getTimeout(key); - // -2 = 无此键 - if(expire == SaTokenDao.NOT_VALUE_EXPIRE) { - return; - } - this.set(key, value, expire); - } - - /** - * 删除Value - */ - @Override - public void delete(String key) { - stringRedisTemplate.delete(key); - } - - /** - * 获取Value的剩余存活时间 (单位: 秒) - */ - @Override - public long getTimeout(String key) { - return stringRedisTemplate.getExpire(key); - } - - /** - * 修改Value的剩余存活时间 (单位: 秒) - */ - @Override - public void updateTimeout(String key, long timeout) { - // 判断是否想要设置为永久 - if(timeout == SaTokenDao.NEVER_EXPIRE) { - long expire = getTimeout(key); - if(expire == SaTokenDao.NEVER_EXPIRE) { - // 如果其已经被设置为永久,则不作任何处理 - } else { - // 如果尚未被设置为永久,那么再次set一次 - this.set(key, this.get(key), timeout); - } - return; - } - stringRedisTemplate.expire(key, timeout, TimeUnit.SECONDS); - } - - - /** - * 获取Object,如无返空 - */ - @Override - public Object getObject(String key) { - return objectRedisTemplate.opsForValue().get(key); - } - - @Override - public SaSession getSession(String sessionId) { - Object obj = getObject(sessionId); - if (obj == null) { - return null; - } - return JSON.parseObject(obj.toString(), SaSessionForFastjson2Customized.class); - } - - /** - * 写入Object,并设定存活时间 (单位: 秒) - */ - @Override - public void setObject(String key, Object object, long timeout) { - if(timeout == 0 || timeout <= SaTokenDao.NOT_VALUE_EXPIRE) { - return; - } - String toValue = JSON.toJSONString(object); - // 判断是否为永不过期 - if(timeout == SaTokenDao.NEVER_EXPIRE) { - objectRedisTemplate.opsForValue().set(key, toValue); - } else { - objectRedisTemplate.opsForValue().set(key, toValue, timeout, TimeUnit.SECONDS); - } - } - - /** - * 更新Object (过期时间不变) - */ - @Override - public void updateObject(String key, Object object) { - long expire = getObjectTimeout(key); - // -2 = 无此键 - if(expire == SaTokenDao.NOT_VALUE_EXPIRE) { - return; - } - this.setObject(key, object, expire); - } - - /** - * 删除Object - */ - @Override - public void deleteObject(String key) { - objectRedisTemplate.delete(key); - } - - /** - * 获取Object的剩余存活时间 (单位: 秒) - */ - @Override - public long getObjectTimeout(String key) { - return objectRedisTemplate.getExpire(key); - } - - /** - * 修改Object的剩余存活时间 (单位: 秒) - */ - @Override - public void updateObjectTimeout(String key, long timeout) { - // 判断是否想要设置为永久 - if(timeout == SaTokenDao.NEVER_EXPIRE) { - long expire = getObjectTimeout(key); - if(expire == SaTokenDao.NEVER_EXPIRE) { - // 如果其已经被设置为永久,则不作任何处理 - } else { - // 如果尚未被设置为永久,那么再次set一次 - this.setObject(key, this.getObject(key), timeout); - } - return; - } - objectRedisTemplate.expire(key, timeout, TimeUnit.SECONDS); - } - - - - /** - * 搜索数据 - */ - @Override - public List searchData(String prefix, String keyword, int start, int size, boolean sortType) { - Set keys = stringRedisTemplate.keys(prefix + "*" + keyword + "*"); - List list = new ArrayList<>(keys); - return SaFoxUtil.searchList(list, start, size, sortType); - } - - -} diff --git a/sa-token-plugin/sa-token-redis-fastjson2/src/main/resources/META-INF/spring.factories b/sa-token-plugin/sa-token-redis-fastjson2/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 8774edc6..00000000 --- a/sa-token-plugin/sa-token-redis-fastjson2/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.dev33.satoken.dao.SaTokenDaoRedisFastjson2 \ No newline at end of file diff --git a/sa-token-plugin/sa-token-redis-fastjson2/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/sa-token-plugin/sa-token-redis-fastjson2/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index c15b81e2..00000000 --- a/sa-token-plugin/sa-token-redis-fastjson2/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -cn.dev33.satoken.dao.SaTokenDaoRedisFastjson2 \ No newline at end of file