From c563afed59b0313ce5509f94e8b1f0243e96f8df Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期一, 14 十月 2024 00:38:07 +0800 Subject: [PATCH] fix 修复 EncryptorManager 缓存失效问题导致的内存膨胀 --- ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/EncryptorManager.java | 22 ++++++++++++---------- 1 files changed, 12 insertions(+), 10 deletions(-) diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/EncryptorManager.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/EncryptorManager.java index 356b043..2d795e0 100644 --- a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/EncryptorManager.java +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/EncryptorManager.java @@ -17,7 +17,10 @@ import org.springframework.util.ClassUtils; import java.lang.reflect.Field; -import java.util.*; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @@ -34,7 +37,7 @@ /** * 缂撳瓨鍔犲瘑鍣� */ - Map<EncryptContext, IEncryptor> encryptorMap = new ConcurrentHashMap<>(); + Map<Integer, IEncryptor> encryptorMap = new ConcurrentHashMap<>(); /** * 绫诲姞瀵嗗瓧娈电紦瀛� @@ -47,7 +50,7 @@ * @param typeAliasesPackage 瀹炰綋绫诲寘 */ public EncryptorManager(String typeAliasesPackage) { - this.fieldCache = scanEncryptClasses(typeAliasesPackage); + scanEncryptClasses(typeAliasesPackage); } @@ -67,11 +70,12 @@ * @param encryptContext 鍔犲瘑鎵ц鑰呴渶瑕佺殑鐩稿叧閰嶇疆鍙傛暟 */ public IEncryptor registAndGetEncryptor(EncryptContext encryptContext) { - if (encryptorMap.containsKey(encryptContext)) { - return encryptorMap.get(encryptContext); + int key = encryptContext.hashCode(); + if (encryptorMap.containsKey(key)) { + return encryptorMap.get(key); } IEncryptor encryptor = ReflectUtil.newInstance(encryptContext.getAlgorithm().getClazz(), encryptContext); - encryptorMap.put(encryptContext, encryptor); + encryptorMap.put(key, encryptor); return encryptor; } @@ -81,7 +85,7 @@ * @param encryptContext 鍔犲瘑鎵ц鑰呴渶瑕佺殑鐩稿叧閰嶇疆鍙傛暟 */ public void removeEncryptor(EncryptContext encryptContext) { - this.encryptorMap.remove(encryptContext); + this.encryptorMap.remove(encryptContext.hashCode()); } /** @@ -109,8 +113,7 @@ /** * 閫氳繃 typeAliasesPackage 璁剧疆鐨勬壂鎻忓寘 鎵弿缂撳瓨瀹炰綋 */ - private Map<Class<?>, Set<Field>> scanEncryptClasses(String typeAliasesPackage) { - Map<Class<?>, Set<Field>> fieldCache = new HashMap<>(); + private void scanEncryptClasses(String typeAliasesPackage) { PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); CachingMetadataReaderFactory factory = new CachingMetadataReaderFactory(); String[] packagePatternArray = StringUtils.splitPreserveAllTokens(typeAliasesPackage, ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS); @@ -131,7 +134,6 @@ } catch (Exception e) { log.error("鍒濆鍖栨暟鎹畨鍏ㄧ紦瀛樻椂鍑洪敊:{}", e.getMessage()); } - return fieldCache; } /** -- Gitblit v1.9.3