From f3cec926c6c2443c2312a754728d14531a34a748 Mon Sep 17 00:00:00 2001
From: click33 <2393584716@qq.com>
Date: Sun, 23 Feb 2025 02:55:14 +0800
Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=20sa-token-redis?=
=?UTF-8?q?son=20=E6=8F=92=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sa-token-bom/pom.xml | 2 +-
.../sa-token-demo-springboot-redisson/pom.xml | 7 +-
sa-token-plugin/pom.xml | 2 +-
.../SaSessionForFastjsonCustomized.java | 7 +
.../SaSessionForFastjson2Customized.java | 7 +
.../json/SaJsonTemplateForJackson.java | 4 +
.../dao/SaSessionForJacksonCustomized.java | 47 ---
.../dao/SaTokenDaoRedissonJackson.java | 311 ------------------
...ot.autoconfigure.AutoConfiguration.imports | 1 -
.../.gitignore | 0
.../pom.xml | 15 +-
.../satoken/dao/SaTokenDaoForRedisson.java | 156 +++++++++
.../main/resources/META-INF/spring.factories | 2 +-
...ot.autoconfigure.AutoConfiguration.imports | 1 +
14 files changed, 185 insertions(+), 377 deletions(-)
delete mode 100644 sa-token-plugin/sa-token-redisson-jackson/src/main/java/cn/dev33/satoken/dao/SaSessionForJacksonCustomized.java
delete mode 100644 sa-token-plugin/sa-token-redisson-jackson/src/main/java/cn/dev33/satoken/dao/SaTokenDaoRedissonJackson.java
delete mode 100644 sa-token-plugin/sa-token-redisson-jackson/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
rename sa-token-plugin/{sa-token-redisson-jackson => sa-token-redisson}/.gitignore (100%)
rename sa-token-plugin/{sa-token-redisson-jackson => sa-token-redisson}/pom.xml (69%)
create mode 100644 sa-token-plugin/sa-token-redisson/src/main/java/cn/dev33/satoken/dao/SaTokenDaoForRedisson.java
rename sa-token-plugin/{sa-token-redisson-jackson => sa-token-redisson}/src/main/resources/META-INF/spring.factories (58%)
create mode 100644 sa-token-plugin/sa-token-redisson/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 c1efadc2..10dd50dc 100644
--- a/sa-token-bom/pom.xml
+++ b/sa-token-bom/pom.xml
@@ -136,7 +136,7 @@
cn.dev33
- sa-token-redisson-jackson
+ sa-token-redisson
${revision}
diff --git a/sa-token-demo/sa-token-demo-springboot-redisson/pom.xml b/sa-token-demo/sa-token-demo-springboot-redisson/pom.xml
index 9dfa3b12..7717fd1e 100644
--- a/sa-token-demo/sa-token-demo-springboot-redisson/pom.xml
+++ b/sa-token-demo/sa-token-demo-springboot-redisson/pom.xml
@@ -42,9 +42,14 @@
cn.dev33
- sa-token-redisson-jackson
+ sa-token-redisson
${sa-token.version}
+
+ cn.dev33
+ sa-token-jackson
+ ${sa-token.version}
+
diff --git a/sa-token-plugin/pom.xml b/sa-token-plugin/pom.xml
index 092f261e..5f584e92 100644
--- a/sa-token-plugin/pom.xml
+++ b/sa-token-plugin/pom.xml
@@ -41,11 +41,11 @@
sa-token-spring-el
sa-token-grpc
sa-token-quick-login
+ sa-token-redisson
sa-token-redisx
- sa-token-redisson-jackson
sa-token-redisson-jackson2
diff --git a/sa-token-plugin/sa-token-fastjson/src/main/java/cn/dev33/satoken/session/SaSessionForFastjsonCustomized.java b/sa-token-plugin/sa-token-fastjson/src/main/java/cn/dev33/satoken/session/SaSessionForFastjsonCustomized.java
index d6b987b5..c82e236a 100644
--- a/sa-token-plugin/sa-token-fastjson/src/main/java/cn/dev33/satoken/session/SaSessionForFastjsonCustomized.java
+++ b/sa-token-plugin/sa-token-fastjson/src/main/java/cn/dev33/satoken/session/SaSessionForFastjsonCustomized.java
@@ -28,6 +28,13 @@ public class SaSessionForFastjsonCustomized extends SaSession {
private static final long serialVersionUID = -7600983549653130681L;
+ /**
+ * 构建一个 SaSession 对象
+ */
+ public SaSessionForFastjsonCustomized() {
+ super();
+ }
+
/**
* 构建一个 SaSession 对象
* @param id Session 的 id
diff --git a/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/session/SaSessionForFastjson2Customized.java b/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/session/SaSessionForFastjson2Customized.java
index 694c2653..5a0d17fa 100644
--- a/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/session/SaSessionForFastjson2Customized.java
+++ b/sa-token-plugin/sa-token-fastjson2/src/main/java/cn/dev33/satoken/session/SaSessionForFastjson2Customized.java
@@ -28,6 +28,13 @@ public class SaSessionForFastjson2Customized extends SaSession {
private static final long serialVersionUID = -7600983549653130681L;
+ /**
+ * 构建一个 SaSession 对象
+ */
+ public SaSessionForFastjson2Customized() {
+ super();
+ }
+
/**
* 构建一个 SaSession 对象
* @param id Session 的 id
diff --git a/sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForJackson.java b/sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForJackson.java
index d8823c32..f667c10f 100644
--- a/sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForJackson.java
+++ b/sa-token-plugin/sa-token-jackson/src/main/java/cn/dev33/satoken/json/SaJsonTemplateForJackson.java
@@ -106,7 +106,11 @@ public class SaJsonTemplateForJackson implements SaJsonTemplate {
*/
@Override
public String objectToJson(Object obj) {
+ if(SaFoxUtil.isEmpty(obj)) {
+ return null;
+ }
try {
+ System.out.println("序列化的啥:" + objectMapper.writeValueAsString(obj));
return objectMapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
throw new SaJsonConvertException(e);
diff --git a/sa-token-plugin/sa-token-redisson-jackson/src/main/java/cn/dev33/satoken/dao/SaSessionForJacksonCustomized.java b/sa-token-plugin/sa-token-redisson-jackson/src/main/java/cn/dev33/satoken/dao/SaSessionForJacksonCustomized.java
deleted file mode 100644
index fe56ca4f..00000000
--- a/sa-token-plugin/sa-token-redisson-jackson/src/main/java/cn/dev33/satoken/dao/SaSessionForJacksonCustomized.java
+++ /dev/null
@@ -1,47 +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 cn.dev33.satoken.session.SaSession;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-/**
- * Jackson定制版SaSession,忽略 timeout 等属性的序列化
- *
- * @author click33
- * @since 1.34.0
- */
-@JsonIgnoreProperties({"timeout"})
-public class SaSessionForJacksonCustomized extends SaSession {
-
- /**
- *
- */
- private static final long serialVersionUID = -7600983549653130681L;
-
- public SaSessionForJacksonCustomized() {
- super();
- }
-
- /**
- * 构建一个Session对象
- * @param id Session的id
- */
- public SaSessionForJacksonCustomized(String id) {
- super(id);
- }
-
-}
diff --git a/sa-token-plugin/sa-token-redisson-jackson/src/main/java/cn/dev33/satoken/dao/SaTokenDaoRedissonJackson.java b/sa-token-plugin/sa-token-redisson-jackson/src/main/java/cn/dev33/satoken/dao/SaTokenDaoRedissonJackson.java
deleted file mode 100644
index 00e68a72..00000000
--- a/sa-token-plugin/sa-token-redisson-jackson/src/main/java/cn/dev33/satoken/dao/SaTokenDaoRedissonJackson.java
+++ /dev/null
@@ -1,311 +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.lang.reflect.Field;
-import java.time.Duration;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.format.DateTimeFormatter;
-import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import org.redisson.api.RBatch;
-import org.redisson.api.RBucket;
-import org.redisson.api.RBucketAsync;
-import org.redisson.api.RedissonClient;
-import org.redisson.client.codec.Codec;
-import org.redisson.codec.JsonJacksonCodec;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
-import org.springframework.stereotype.Component;
-
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
-import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
-import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
-import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
-import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
-import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
-import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
-
-import cn.dev33.satoken.strategy.SaStrategy;
-import cn.dev33.satoken.util.SaFoxUtil;
-
-/**
- * Sa-Token 持久层实现 [ Redisson客户端、Redis存储、Jackson序列化 ]
- *
- * @author 疯狂的狮子Li
- * @since 1.34.0
- */
-@Component
-public class SaTokenDaoRedissonJackson implements SaTokenDao {
-
- public static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
- public static final String DATE_PATTERN = "yyyy-MM-dd";
- public static final String TIME_PATTERN = "HH:mm:ss";
- public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern(DATE_TIME_PATTERN);
- public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(DATE_PATTERN);
- public static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern(TIME_PATTERN);
-
- /**
- * ObjectMapper 对象 (以 public 作用域暴露出此对象,方便开发者二次更改配置)
- *
- * 例如:
- *
- * SaTokenDaoRedisJackson redisJackson = (SaTokenDaoRedisJackson) SaManager.getSaTokenDao();
- * redisJackson.objectMapper.xxx = xxx;
- *
- *
- */
- public ObjectMapper objectMapper;
-
- /**
- * 序列化方式
- */
- public Codec codec;
-
- /**
- * redisson 客户端
- */
- public RedissonClient redissonClient;
-
- /**
- * 标记:是否已初始化成功
- */
- public boolean isInit;
-
- @Autowired
- public void init(RedissonClient redissonClient) {
- // 不重复初始化
- if(this.isInit) {
- return;
- }
-
- // 指定相应的序列化方案
- GenericJackson2JsonRedisSerializer valueSerializer = new GenericJackson2JsonRedisSerializer();
- // 通过反射获取Mapper对象, 增加一些配置, 增强兼容性
- try {
- Field field = GenericJackson2JsonRedisSerializer.class.getDeclaredField("mapper");
- field.setAccessible(true);
- this.objectMapper = (ObjectMapper) field.get(valueSerializer);
- // 配置[忽略未知字段]
- this.objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- // 配置[时间类型转换]
- JavaTimeModule timeModule = new JavaTimeModule();
- // LocalDateTime序列化与反序列化
- timeModule.addSerializer(new LocalDateTimeSerializer(DATE_TIME_FORMATTER));
- timeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DATE_TIME_FORMATTER));
- // LocalDate序列化与反序列化
- timeModule.addSerializer(new LocalDateSerializer(DATE_FORMATTER));
- timeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DATE_FORMATTER));
- // LocalTime序列化与反序列化
- timeModule.addSerializer(new LocalTimeSerializer(TIME_FORMATTER));
- timeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(TIME_FORMATTER));
- this.objectMapper.registerModule(timeModule);
- // 重写 SaSession 生成策略
- SaStrategy.instance.createSession = (sessionId) -> new SaSessionForJacksonCustomized(sessionId);
- } catch (Exception e) {
- System.err.println(e.getMessage());
- }
-
- // 开始初始化相关组件
- this.codec = new JsonJacksonCodec(objectMapper);
- this.redissonClient = redissonClient;
- this.isInit = true;
- }
-
-
- /**
- * 获取Value,如无返空
- */
- @Override
- public String get(String key) {
- RBucket rBucket = redissonClient.getBucket(key, codec);
- return rBucket.get();
- }
-
- /**
- * 写入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) {
- RBucket bucket = redissonClient.getBucket(key, codec);
- bucket.set(value);
- } else {
- RBatch batch = redissonClient.createBatch();
- RBucketAsync bucket = batch.getBucket(key, codec);
- bucket.setAsync(value);
- bucket.expireAsync(Duration.ofSeconds(timeout));
- batch.execute();
- }
- }
-
- /**
- * 修修改指定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) {
- redissonClient.getBucket(key, codec).delete();
- }
-
- /**
- * 获取Value的剩余存活时间 (单位: 秒)
- */
- @Override
- public long getTimeout(String key) {
- RBucket rBucket = redissonClient.getBucket(key, codec);
- long timeout = rBucket.remainTimeToLive();
- return timeout < 0 ? timeout : timeout / 1000;
- }
-
- /**
- * 修改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;
- }
- RBucket rBucket = redissonClient.getBucket(key, codec);
- rBucket.expire(Duration.ofSeconds(timeout));
- }
-
-
-
- /**
- * 获取Object,如无返空
- */
- @Override
- public Object getObject(String key) {
- RBucket