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 rBucket = redissonClient.getBucket(key, codec); - return rBucket.get(); - } - - /** - * 写入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) { - RBucket bucket = redissonClient.getBucket(key, codec); - bucket.set(object); - } else { - RBatch batch = redissonClient.createBatch(); - RBucketAsync bucket = batch.getBucket(key, codec); - bucket.setAsync(object); - bucket.expireAsync(Duration.ofSeconds(timeout)); - batch.execute(); - } - - } - - /** - * 更新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) { - redissonClient.getBucket(key, codec).delete(); - } - - /** - * 获取Object的剩余存活时间 (单位: 秒) - */ - @Override - public long getObjectTimeout(String key) { - RBucket rBucket = redissonClient.getBucket(key, codec); - long timeout = rBucket.remainTimeToLive(); - return timeout < 0 ? timeout : timeout / 1000; - } - - /** - * 修改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; - } - RBucket rBucket = redissonClient.getBucket(key, codec); - rBucket.expire(Duration.ofSeconds(timeout)); - } - - - /** - * 搜索数据 - */ - @Override - public List searchData(String prefix, String keyword, int start, int size, boolean sortType) { - Stream stream = redissonClient.getKeys().getKeysStreamByPattern(prefix + "*" + keyword + "*"); - List list = stream.collect(Collectors.toList()); - return SaFoxUtil.searchList(list, start, size, sortType); - } - -} diff --git a/sa-token-plugin/sa-token-redisson-jackson/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/sa-token-plugin/sa-token-redisson-jackson/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 9298bbff..00000000 --- a/sa-token-plugin/sa-token-redisson-jackson/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -cn.dev33.satoken.dao.SaTokenDaoRedissonJackson \ No newline at end of file diff --git a/sa-token-plugin/sa-token-redisson-jackson/.gitignore b/sa-token-plugin/sa-token-redisson/.gitignore similarity index 100% rename from sa-token-plugin/sa-token-redisson-jackson/.gitignore rename to sa-token-plugin/sa-token-redisson/.gitignore diff --git a/sa-token-plugin/sa-token-redisson-jackson/pom.xml b/sa-token-plugin/sa-token-redisson/pom.xml similarity index 69% rename from sa-token-plugin/sa-token-redisson-jackson/pom.xml rename to sa-token-plugin/sa-token-redisson/pom.xml index 882dd41b..ddf26330 100644 --- a/sa-token-plugin/sa-token-redisson-jackson/pom.xml +++ b/sa-token-plugin/sa-token-redisson/pom.xml @@ -13,7 +13,7 @@ jar sa-token-redisson-jackson - sa-token-redisson-jackson + sa-token-redisson sa-token integrate redisson (to jackson) @@ -28,19 +28,6 @@ redisson-spring-boot-starter - - - com.fasterxml.jackson.core - jackson-databind - true - - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - true - - diff --git a/sa-token-plugin/sa-token-redisson/src/main/java/cn/dev33/satoken/dao/SaTokenDaoForRedisson.java b/sa-token-plugin/sa-token-redisson/src/main/java/cn/dev33/satoken/dao/SaTokenDaoForRedisson.java new file mode 100644 index 00000000..dd97a77a --- /dev/null +++ b/sa-token-plugin/sa-token-redisson/src/main/java/cn/dev33/satoken/dao/SaTokenDaoForRedisson.java @@ -0,0 +1,156 @@ +/* + * 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.dao.auto.SaTokenDaoByObjectFollowStringUseJsonSerializer; +import cn.dev33.satoken.util.SaFoxUtil; +import org.redisson.api.RBatch; +import org.redisson.api.RBucket; +import org.redisson.api.RBucketAsync; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.time.Duration; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * Sa-Token 持久层实现 [ Redisson客户端、Redis存储、Jackson序列化 ] + * + * @author 疯狂的狮子Li + * @since 1.34.0 + */ +@Component +public class SaTokenDaoForRedisson implements SaTokenDaoByObjectFollowStringUseJsonSerializer { + + /** + * redisson 客户端 + */ + public RedissonClient redissonClient; + + /** + * 标记:是否已初始化成功 + */ + public boolean isInit; + + @Autowired + public void init(RedissonClient redissonClient) { + // 不重复初始化 + if(this.isInit) { + return; + } + + // 开始初始化相关组件 + this.redissonClient = redissonClient; + this.isInit = true; + } + + + /** + * 获取Value,如无返空 + */ + @Override + public String get(String key) { + RBucket rBucket = redissonClient.getBucket(key); + 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); + bucket.set(value); + } else { + RBatch batch = redissonClient.createBatch(); + RBucketAsync bucket = batch.getBucket(key); + 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).delete(); + } + + /** + * 获取Value的剩余存活时间 (单位: 秒) + */ + @Override + public long getTimeout(String key) { + RBucket rBucket = redissonClient.getBucket(key); + 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); + rBucket.expire(Duration.ofSeconds(timeout)); + } + + + /** + * 搜索数据 + */ + @Override + public List searchData(String prefix, String keyword, int start, int size, boolean sortType) { + Stream stream = redissonClient.getKeys().getKeysStreamByPattern(prefix + "*" + keyword + "*"); + List list = stream.collect(Collectors.toList()); + return SaFoxUtil.searchList(list, start, size, sortType); + } + +} diff --git a/sa-token-plugin/sa-token-redisson-jackson/src/main/resources/META-INF/spring.factories b/sa-token-plugin/sa-token-redisson/src/main/resources/META-INF/spring.factories similarity index 58% rename from sa-token-plugin/sa-token-redisson-jackson/src/main/resources/META-INF/spring.factories rename to sa-token-plugin/sa-token-redisson/src/main/resources/META-INF/spring.factories index 751fea99..79e474b2 100644 --- a/sa-token-plugin/sa-token-redisson-jackson/src/main/resources/META-INF/spring.factories +++ b/sa-token-plugin/sa-token-redisson/src/main/resources/META-INF/spring.factories @@ -1 +1 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.dev33.satoken.dao.SaTokenDaoRedissonJackson \ No newline at end of file +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.dev33.satoken.dao.SaTokenDaoForRedisson \ No newline at end of file diff --git a/sa-token-plugin/sa-token-redisson/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/sa-token-plugin/sa-token-redisson/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000..36aa50fe --- /dev/null +++ b/sa-token-plugin/sa-token-redisson/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +cn.dev33.satoken.dao.SaTokenDaoForRedisson \ No newline at end of file