mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-10-31 00:57:13 +08:00 
			
		
		
		
	修复:修复生产环境报 java.lang.NoClassDefFoundError: org/springframework/data/redis/connection/zset/Tuple 的错误问题(移除 Sa-Token 集成 Redis 依赖,改为本地 Redis 适配 SaTokenDao)
This commit is contained in:
		| @@ -0,0 +1,156 @@ | ||||
| /* | ||||
|  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||
|  * | ||||
|  * 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 top.charles7c.cnadmin.auth.config.satoken; | ||||
|  | ||||
| import java.time.Duration; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
|  | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import cn.dev33.satoken.dao.SaTokenDao; | ||||
| import cn.dev33.satoken.util.SaFoxUtil; | ||||
|  | ||||
| import top.charles7c.cnadmin.common.util.RedisUtils; | ||||
|  | ||||
| /** | ||||
|  * SaTokenDao 的本地 Redis 适配(参考:Sa-Token/sa-token-plugin/sa-token-dao-redisx/SaTokenDaoOfRedis.java) | ||||
|  * | ||||
|  * @author Charles7c | ||||
|  * @since 2022/12/28 22:55 | ||||
|  */ | ||||
| @Component | ||||
| public class SaTokenRedisDaoImpl implements SaTokenDao { | ||||
|  | ||||
|     @Override | ||||
|     public String get(String key) { | ||||
|         return RedisUtils.getCacheObject(key); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void set(String key, String value, long timeout) { | ||||
|         if (timeout == 0 || timeout <= SaTokenDao.NOT_VALUE_EXPIRE) { | ||||
|             return; | ||||
|         } | ||||
|         // 判断是否为永不过期 | ||||
|         if (timeout == SaTokenDao.NEVER_EXPIRE) { | ||||
|             RedisUtils.setCacheObject(key, value); | ||||
|         } else { | ||||
|             RedisUtils.setCacheObject(key, value, Duration.ofSeconds(timeout)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @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); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void delete(String key) { | ||||
|         RedisUtils.deleteCacheObject(key); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public long getTimeout(String key) { | ||||
|         long timeout = RedisUtils.getTimeToLive(key); | ||||
|         return timeout < 0 ? timeout : timeout / 1000; | ||||
|     } | ||||
|  | ||||
|     @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; | ||||
|         } | ||||
|         RedisUtils.expire(key, Duration.ofSeconds(timeout)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Object getObject(String key) { | ||||
|         return RedisUtils.getCacheObject(key); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setObject(String key, Object object, long timeout) { | ||||
|         if (timeout == 0 || timeout <= SaTokenDao.NOT_VALUE_EXPIRE) { | ||||
|             return; | ||||
|         } | ||||
|         // 判断是否为永不过期 | ||||
|         if (timeout == SaTokenDao.NEVER_EXPIRE) { | ||||
|             RedisUtils.setCacheObject(key, object); | ||||
|         } else { | ||||
|             RedisUtils.setCacheObject(key, object, Duration.ofSeconds(timeout)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @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); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void deleteObject(String key) { | ||||
|         RedisUtils.deleteCacheObject(key); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public long getObjectTimeout(String key) { | ||||
|         long timeout = RedisUtils.getTimeToLive(key); | ||||
|         return timeout < 0 ? timeout : timeout / 1000; | ||||
|     } | ||||
|  | ||||
|     @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; | ||||
|         } | ||||
|         RedisUtils.expire(key, Duration.ofSeconds(timeout)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<String> searchData(String prefix, String keyword, int start, int size, boolean sortType) { | ||||
|         Collection<String> keys = RedisUtils.keys(prefix + "*" + keyword + "*"); | ||||
|         List<String> list = new ArrayList<>(keys); | ||||
|         return SaFoxUtil.searchList(list, start, size, sortType); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user