diff --git a/sa-token-plugin/sa-token-alone-redis/src/main/java/cn/dev33/satoken/dao/alone/SaAloneRedisInject.java b/sa-token-plugin/sa-token-alone-redis/src/main/java/cn/dev33/satoken/dao/alone/SaAloneRedisInject.java
index 100ea6a8..c051783a 100644
--- a/sa-token-plugin/sa-token-alone-redis/src/main/java/cn/dev33/satoken/dao/alone/SaAloneRedisInject.java
+++ b/sa-token-plugin/sa-token-alone-redis/src/main/java/cn/dev33/satoken/dao/alone/SaAloneRedisInject.java
@@ -19,7 +19,7 @@ import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.dao.SaTokenDaoDefaultImpl;
import cn.dev33.satoken.dao.SaTokenDaoRedisFastjson;
import cn.dev33.satoken.dao.SaTokenDaoRedisFastjson2;
-import cn.dev33.satoken.dao.impl.SaTokenDaoForRedisTemplate;
+import cn.dev33.satoken.dao.SaTokenDaoForRedisTemplate;
import cn.dev33.satoken.exception.SaTokenException;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/java/cn/dev33/satoken/dao/SaTokenDaoRedis.java b/sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/java/cn/dev33/satoken/dao/SaTokenDaoForRedisTemplate.java
similarity index 55%
rename from sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/java/cn/dev33/satoken/dao/SaTokenDaoRedis.java
rename to sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/java/cn/dev33/satoken/dao/SaTokenDaoForRedisTemplate.java
index a91fe362..b8ba5692 100644
--- a/sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/java/cn/dev33/satoken/dao/SaTokenDaoRedis.java
+++ b/sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/java/cn/dev33/satoken/dao/SaTokenDaoForRedisTemplate.java
@@ -15,39 +15,27 @@
*/
package cn.dev33.satoken.dao;
+import cn.dev33.satoken.dao.auto.SaTokenDaoByObjectFollowStringUseJsonSerializer;
+import cn.dev33.satoken.util.SaFoxUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.StringRedisTemplate;
+
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.RedisTemplate;
-import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
-import org.springframework.stereotype.Component;
-
-import cn.dev33.satoken.util.SaFoxUtil;
-
/**
- * Sa-Token 持久层实现 [ Redis存储、JDK默认序列化 ]
+ * Sa-Token 持久层实现 [ RedisTemplate 存储 ] (可用环境: SpringBoot2、SpringBoot3)
+ *
copy by: sa-token-redis-template 插件
*
* @author click33
* @since 1.34.0
*/
-@Component
-public class SaTokenDaoRedis implements SaTokenDao {
+public class SaTokenDaoForRedisTemplate implements SaTokenDaoByObjectFollowStringUseJsonSerializer {
- /**
- * String 读写专用
- */
- public StringRedisTemplate stringRedisTemplate;
-
- /**
- * Object 读写专用
- */
- public RedisTemplate objectRedisTemplate;
+ public StringRedisTemplate stringRedisTemplate;
/**
* 标记:当前 redis 连接信息是否已初始化成功
@@ -60,34 +48,24 @@ public class SaTokenDaoRedis implements SaTokenDao {
if(this.isInit) {
return;
}
-
- // 指定相应的序列化方案
- StringRedisSerializer keySerializer = new StringRedisSerializer();
- JdkSerializationRedisSerializer valueSerializer = new JdkSerializationRedisSerializer();
// 构建StringRedisTemplate
StringRedisTemplate stringTemplate = new StringRedisTemplate();
stringTemplate.setConnectionFactory(connectionFactory);
stringTemplate.afterPropertiesSet();
-
- // 构建RedisTemplate
- RedisTemplate template = new RedisTemplate<>();
- template.setConnectionFactory(connectionFactory);
- template.setKeySerializer(keySerializer);
- template.setHashKeySerializer(keySerializer);
- template.setValueSerializer(valueSerializer);
- template.setHashValueSerializer(valueSerializer);
- template.afterPropertiesSet();
-
- // 开始初始化相关组件
this.stringRedisTemplate = stringTemplate;
- this.objectRedisTemplate = template;
+
+ initMore(connectionFactory);
// 打上标记,表示已经初始化成功,后续无需再重新初始化
this.isInit = true;
}
-
-
+
+ protected void initMore(RedisConnectionFactory connectionFactory) {
+
+ }
+
+
/**
* 获取Value,如无返空
*/
@@ -159,79 +137,6 @@ public class SaTokenDaoRedis implements SaTokenDao {
}
stringRedisTemplate.expire(key, timeout, TimeUnit.SECONDS);
}
-
-
- /**
- * 获取Object,如无返空
- */
- @Override
- public Object getObject(String key) {
- return objectRedisTemplate.opsForValue().get(key);
- }
-
- /**
- * 写入Object,并设定存活时间 (单位: 秒)
- */
- @Override
- public void setObject(String key, Object object, long timeout) {
- if(timeout == 0 || timeout <= SaTokenDao.NOT_VALUE_EXPIRE) {
- return;
- }
- // 判断是否为永不过期
- if(timeout == SaTokenDao.NEVER_EXPIRE) {
- objectRedisTemplate.opsForValue().set(key, object);
- } else {
- objectRedisTemplate.opsForValue().set(key, object, 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);
- }
diff --git a/sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/java/cn/dev33/satoken/dao/SaTokenDaoForRedisTemplateUseJdkSerializer.java b/sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/java/cn/dev33/satoken/dao/SaTokenDaoForRedisTemplateUseJdkSerializer.java
new file mode 100644
index 00000000..f7a4e064
--- /dev/null
+++ b/sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/java/cn/dev33/satoken/dao/SaTokenDaoForRedisTemplateUseJdkSerializer.java
@@ -0,0 +1,130 @@
+/*
+ * 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 org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Sa-Token 持久层实现 [ RedisTemplate 存储、JDK默认序列化 ] (可用环境: SpringBoot2、SpringBoot3)
+ *
+ * @author click33
+ * @since 1.34.0
+ */
+public class SaTokenDaoForRedisTemplateUseJdkSerializer extends SaTokenDaoForRedisTemplate {
+
+ /**
+ * Object 读写专用
+ */
+ public RedisTemplate objectRedisTemplate;
+
+ @Override
+ protected void initMore(RedisConnectionFactory connectionFactory) {
+
+ // 指定相应的序列化方案
+ StringRedisSerializer keySerializer = new StringRedisSerializer();
+ JdkSerializationRedisSerializer valueSerializer = new JdkSerializationRedisSerializer();
+
+ // 构建RedisTemplate
+ RedisTemplate template = new RedisTemplate<>();
+ template.setConnectionFactory(connectionFactory);
+ template.setKeySerializer(keySerializer);
+ template.setHashKeySerializer(keySerializer);
+ template.setValueSerializer(valueSerializer);
+ template.setHashValueSerializer(valueSerializer);
+ template.afterPropertiesSet();
+
+ }
+
+
+ /**
+ * 获取Object,如无返空
+ */
+ @Override
+ public Object getObject(String key) {
+ return objectRedisTemplate.opsForValue().get(key);
+ }
+
+ /**
+ * 写入Object,并设定存活时间 (单位: 秒)
+ */
+ @Override
+ public void setObject(String key, Object object, long timeout) {
+ if(timeout == 0 || timeout <= SaTokenDao.NOT_VALUE_EXPIRE) {
+ return;
+ }
+ // 判断是否为永不过期
+ if(timeout == SaTokenDao.NEVER_EXPIRE) {
+ objectRedisTemplate.opsForValue().set(key, object);
+ } else {
+ objectRedisTemplate.opsForValue().set(key, object, 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);
+ }
+
+
+}
diff --git a/sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/resources/META-INF/spring.factories b/sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/resources/META-INF/spring.factories
index ce5c7e82..c3460937 100644
--- a/sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/resources/META-INF/spring.factories
+++ b/sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/resources/META-INF/spring.factories
@@ -1 +1 @@
-org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.dev33.satoken.dao.SaTokenDaoRedis
\ No newline at end of file
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.dev33.satoken.dao.SaTokenDaoForRedisTemplateUseJdkSerializer
\ No newline at end of file
diff --git a/sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 225469e7..8518af0a 100644
--- a/sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/sa-token-plugin/sa-token-redis-template-jdk-serializer/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.dev33.satoken.dao.SaTokenDaoRedis
\ No newline at end of file
+cn.dev33.satoken.dao.SaTokenDaoForRedisTemplateUseJdkSerializer
\ No newline at end of file
diff --git a/sa-token-plugin/sa-token-redis-template/src/main/java/cn/dev33/satoken/dao/impl/SaTokenDaoForRedisTemplate.java b/sa-token-plugin/sa-token-redis-template/src/main/java/cn/dev33/satoken/dao/SaTokenDaoForRedisTemplate.java
similarity index 96%
rename from sa-token-plugin/sa-token-redis-template/src/main/java/cn/dev33/satoken/dao/impl/SaTokenDaoForRedisTemplate.java
rename to sa-token-plugin/sa-token-redis-template/src/main/java/cn/dev33/satoken/dao/SaTokenDaoForRedisTemplate.java
index a0c92938..c2e9fef7 100644
--- a/sa-token-plugin/sa-token-redis-template/src/main/java/cn/dev33/satoken/dao/impl/SaTokenDaoForRedisTemplate.java
+++ b/sa-token-plugin/sa-token-redis-template/src/main/java/cn/dev33/satoken/dao/SaTokenDaoForRedisTemplate.java
@@ -13,15 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package cn.dev33.satoken.dao.impl;
+package cn.dev33.satoken.dao;
-import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.dao.auto.SaTokenDaoByObjectFollowStringUseJsonSerializer;
import cn.dev33.satoken.util.SaFoxUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@@ -34,7 +32,6 @@ import java.util.concurrent.TimeUnit;
* @author click33
* @since 1.34.0
*/
-@Component
public class SaTokenDaoForRedisTemplate implements SaTokenDaoByObjectFollowStringUseJsonSerializer {
public StringRedisTemplate stringRedisTemplate;
@@ -57,11 +54,17 @@ public class SaTokenDaoForRedisTemplate implements SaTokenDaoByObjectFollowStrin
stringTemplate.afterPropertiesSet();
this.stringRedisTemplate = stringTemplate;
+ initMore(connectionFactory);
+
// 打上标记,表示已经初始化成功,后续无需再重新初始化
this.isInit = true;
}
-
-
+
+ protected void initMore(RedisConnectionFactory connectionFactory) {
+
+ }
+
+
/**
* 获取Value,如无返空
*/
diff --git a/sa-token-plugin/sa-token-redis-template/src/main/resources/META-INF/spring.factories b/sa-token-plugin/sa-token-redis-template/src/main/resources/META-INF/spring.factories
index c895fb4b..78085e76 100644
--- a/sa-token-plugin/sa-token-redis-template/src/main/resources/META-INF/spring.factories
+++ b/sa-token-plugin/sa-token-redis-template/src/main/resources/META-INF/spring.factories
@@ -1 +1 @@
-org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.dev33.satoken.dao.impl.SaTokenDaoForRedisTemplate
\ No newline at end of file
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.dev33.satoken.dao.SaTokenDaoForRedisTemplate
\ No newline at end of file
diff --git a/sa-token-plugin/sa-token-redis-template/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/sa-token-plugin/sa-token-redis-template/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 638b0601..6d293f5e 100644
--- a/sa-token-plugin/sa-token-redis-template/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/sa-token-plugin/sa-token-redis-template/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.dev33.satoken.dao.impl.SaTokenDaoForRedisTemplate
\ No newline at end of file
+cn.dev33.satoken.dao.SaTokenDaoForRedisTemplate
\ No newline at end of file