From e2b0b93cca9be79291c99859ef7214051d5aa930 Mon Sep 17 00:00:00 2001 From: dqjdda <201507802@qq.com> Date: Sun, 27 Oct 2019 17:38:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/me/zhengjie/config/RedisConfig.java | 24 ++++++++++++++----- .../service/impl/RedisServiceImpl.java | 7 ++++-- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/eladmin-common/src/main/java/me/zhengjie/config/RedisConfig.java b/eladmin-common/src/main/java/me/zhengjie/config/RedisConfig.java index 99413a72..aea58074 100644 --- a/eladmin-common/src/main/java/me/zhengjie/config/RedisConfig.java +++ b/eladmin-common/src/main/java/me/zhengjie/config/RedisConfig.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.parser.ParserConfig; import com.alibaba.fastjson.serializer.SerializerFeature; import lombok.extern.slf4j.Slf4j; import me.zhengjie.utils.StringUtils; +import org.apache.commons.codec.digest.DigestUtils; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.data.redis.RedisProperties; @@ -26,6 +27,8 @@ import org.springframework.data.redis.serializer.RedisSerializer; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.time.Duration; +import java.util.HashMap; +import java.util.Map; /** * @author Zheng Jie @@ -83,13 +86,22 @@ public class RedisConfig extends CachingConfigurerSupport { @Override public KeyGenerator keyGenerator() { return (target, method, params) -> { - StringBuilder sb = new StringBuilder(); - sb.append(target.getClass().getName()); - sb.append(method.getName()); - for (Object obj : params) { - sb.append(JSON.toJSONString(obj).hashCode()); + Map container = new HashMap<>(); + Class targetClassClass = target.getClass(); + // 类地址 + container.put("class",targetClassClass.toGenericString()); + // 方法名称 + container.put("methodName",method.getName()); + // 包名称 + container.put("package",targetClassClass.getPackage()); + // 参数列表 + for (int i = 0; i < params.length; i++) { + container.put(String.valueOf(i),params[i]); } - return sb.toString(); + // 转为JSON字符串 + String jsonString = JSON.toJSONString(container); + // 做SHA256 Hash计算,得到一个SHA256摘要作为Key + return DigestUtils.sha256Hex(jsonString); }; } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/RedisServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/RedisServiceImpl.java index 93431834..96439220 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/RedisServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/RedisServiceImpl.java @@ -27,6 +27,9 @@ public class RedisServiceImpl implements RedisService { @Value("${loginCode.expiration}") private Long expiration; + @Value("${jwt.online}") + private String onlineKey; + public RedisServiceImpl(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } @@ -40,7 +43,7 @@ public class RedisServiceImpl implements RedisService { Set keys = redisTemplate.keys(key); for (String s : keys) { // 过滤掉权限的缓存 - if (s.contains("role::loadPermissionByUser") || s.contains("user::loadUserByUsername") || s.contains("online:token")) { + if (s.contains("role::loadPermissionByUser") || s.contains("user::loadUserByUsername") || s.contains(onlineKey)) { continue; } RedisVo redisVo = new RedisVo(s, Objects.requireNonNull(redisTemplate.opsForValue().get(s)).toString()); @@ -60,7 +63,7 @@ public class RedisServiceImpl implements RedisService { @Override public void deleteAll() { Set keys = redisTemplate.keys( "*"); - redisTemplate.delete(keys.stream().filter(s -> !s.contains("online:token")).collect(Collectors.toList())); + redisTemplate.delete(keys.stream().filter(s -> !s.contains(onlineKey)).collect(Collectors.toList())); } @Override