From f1eeb08d906502b3f31e99d0b4afafad6b8276e1 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期三, 17 一月 2024 21:20:29 +0800
Subject: [PATCH] update 优化 !pr479 代码效率与书写格式
---
ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/EncryptorManager.java | 74 ++++++++++++++++++++++--
ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/config/EncryptorAutoConfiguration.java | 68 ----------------------
2 files changed, 70 insertions(+), 72 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/config/EncryptorAutoConfiguration.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/config/EncryptorAutoConfiguration.java
index a0e86a6..fbc4e52 100644
--- a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/config/EncryptorAutoConfiguration.java
+++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/config/EncryptorAutoConfiguration.java
@@ -1,11 +1,8 @@
package org.dromara.common.encrypt.config;
-import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.io.Resources;
-import org.dromara.common.encrypt.annotation.EncryptField;
import org.dromara.common.encrypt.core.EncryptorManager;
import org.dromara.common.encrypt.interceptor.MybatisDecryptInterceptor;
import org.dromara.common.encrypt.interceptor.MybatisEncryptInterceptor;
@@ -14,20 +11,7 @@
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
-import org.springframework.core.io.support.ResourcePatternResolver;
-import org.springframework.core.type.ClassMetadata;
-import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
-import org.springframework.util.ClassUtils;
-
-import java.lang.reflect.Field;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static org.springframework.util.StringUtils.tokenizeToStringArray;
/**
* 鍔犺В瀵嗛厤缃�
@@ -43,58 +27,10 @@
@Autowired
private EncryptorProperties properties;
- @Autowired
- private MybatisPlusProperties mybatisPlusProperties;
@Bean
- public EncryptorManager encryptorManager() {
- Map<Class<?>, Set<Field>> fieldCache = scanEncryptClasses(mybatisPlusProperties.getTypeAliasesPackage());
- return new EncryptorManager(fieldCache);
- }
-
- // 閫氳繃typeAliasesPackage璁剧疆鐨勬壂鎻忓寘,鏉ョ‘瀹氬摢浜涘疄浣撶被杩涜缂撳瓨
- private Map<Class<?>, Set<Field>> scanEncryptClasses(String typeAliasesPackage) {
- Map<Class<?>, Set<Field>> fieldCache = new HashMap<>();
- try {
- String[] packagePatternArray = tokenizeToStringArray(typeAliasesPackage,
- ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
- for (String packagePattern : packagePatternArray) {
- Resource[] resources = new PathMatchingResourcePatternResolver().getResources(ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
- + ClassUtils.convertClassNameToResourcePath(packagePattern) + "/**/*.class");
- for (Resource resource : resources) {
- ClassMetadata classMetadata = new CachingMetadataReaderFactory().getMetadataReader(resource).getClassMetadata();
- Class<?> clazz = Resources.classForName(classMetadata.getClassName());
- Set<Field> encryptFieldSet = getEncryptFieldSetFromClazz(clazz);
- if(CollectionUtil.isNotEmpty(encryptFieldSet)) {
- fieldCache.put(clazz, encryptFieldSet);
- }
- }
- }
- }catch (Exception e) {
- log.error("鍒濆鍖栨暟鎹畨鍏ㄧ紦瀛樻椂鍑洪敊:{}", e.getMessage());
- }
- return fieldCache;
- }
-
- // 鑾峰緱涓�涓被鐨勫姞瀵嗗瓧娈甸泦鍚�
- private Set<Field> getEncryptFieldSetFromClazz(Class<?> clazz) {
- Set<Field> fieldSet = new HashSet<>();
- // 鍒ゆ柇clazz濡傛灉鏄帴鍙�,鍐呴儴绫�,鍖垮悕绫诲氨鐩存帴杩斿洖
- if (clazz.isInterface() || clazz.isMemberClass() || clazz.isAnonymousClass()) {
- return fieldSet;
- }
- while (clazz != null) {
- Field[] fields = clazz.getDeclaredFields();
- fieldSet.addAll(Arrays.asList(fields));
- clazz = clazz.getSuperclass();
- }
- fieldSet = fieldSet.stream().filter(field ->
- field.isAnnotationPresent(EncryptField.class) && field.getType() == String.class)
- .collect(Collectors.toSet());
- for (Field field : fieldSet) {
- field.setAccessible(true);
- }
- return fieldSet;
+ public EncryptorManager encryptorManager(MybatisPlusProperties mybatisPlusProperties) {
+ return new EncryptorManager(mybatisPlusProperties.getTypeAliasesPackage());
}
@Bean
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 c2b9cae..356b043 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
@@ -1,14 +1,25 @@
package org.dromara.common.encrypt.core;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReflectUtil;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.io.Resources;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.encrypt.annotation.EncryptField;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.io.support.ResourcePatternResolver;
+import org.springframework.core.type.ClassMetadata;
+import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
+import org.springframework.util.ClassUtils;
import java.lang.reflect.Field;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
/**
* 鍔犲瘑绠$悊绫�
@@ -33,10 +44,10 @@
/**
* 鏋勯�犳柟娉曚紶鍏ョ被鍔犲瘑瀛楁缂撳瓨
*
- * @param fieldCache 绫诲姞瀵嗗瓧娈电紦瀛�
+ * @param typeAliasesPackage 瀹炰綋绫诲寘
*/
- public EncryptorManager(Map<Class<?>, Set<Field>> fieldCache) {
- this.fieldCache = fieldCache;
+ public EncryptorManager(String typeAliasesPackage) {
+ this.fieldCache = scanEncryptClasses(typeAliasesPackage);
}
@@ -44,7 +55,7 @@
* 鑾峰彇绫诲姞瀵嗗瓧娈电紦瀛�
*/
public Set<Field> getFieldCache(Class<?> sourceClazz) {
- if(ObjectUtil.isNotNull(fieldCache)) {
+ if (ObjectUtil.isNotNull(fieldCache)) {
return fieldCache.get(sourceClazz);
}
return null;
@@ -95,4 +106,55 @@
return encryptor.decrypt(value);
}
+ /**
+ * 閫氳繃 typeAliasesPackage 璁剧疆鐨勬壂鎻忓寘 鎵弿缂撳瓨瀹炰綋
+ */
+ private Map<Class<?>, Set<Field>> scanEncryptClasses(String typeAliasesPackage) {
+ Map<Class<?>, Set<Field>> fieldCache = new HashMap<>();
+ PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
+ CachingMetadataReaderFactory factory = new CachingMetadataReaderFactory();
+ String[] packagePatternArray = StringUtils.splitPreserveAllTokens(typeAliasesPackage, ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
+ String classpath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX;
+ try {
+ for (String packagePattern : packagePatternArray) {
+ String path = ClassUtils.convertClassNameToResourcePath(packagePattern);
+ Resource[] resources = resolver.getResources(classpath + path + "/*.class");
+ for (Resource resource : resources) {
+ ClassMetadata classMetadata = factory.getMetadataReader(resource).getClassMetadata();
+ Class<?> clazz = Resources.classForName(classMetadata.getClassName());
+ Set<Field> encryptFieldSet = getEncryptFieldSetFromClazz(clazz);
+ if (CollUtil.isNotEmpty(encryptFieldSet)) {
+ fieldCache.put(clazz, encryptFieldSet);
+ }
+ }
+ }
+ } catch (Exception e) {
+ log.error("鍒濆鍖栨暟鎹畨鍏ㄧ紦瀛樻椂鍑洪敊:{}", e.getMessage());
+ }
+ return fieldCache;
+ }
+
+ /**
+ * 鑾峰緱涓�涓被鐨勫姞瀵嗗瓧娈甸泦鍚�
+ */
+ private Set<Field> getEncryptFieldSetFromClazz(Class<?> clazz) {
+ Set<Field> fieldSet = new HashSet<>();
+ // 鍒ゆ柇clazz濡傛灉鏄帴鍙�,鍐呴儴绫�,鍖垮悕绫诲氨鐩存帴杩斿洖
+ if (clazz.isInterface() || clazz.isMemberClass() || clazz.isAnonymousClass()) {
+ return fieldSet;
+ }
+ while (clazz != null) {
+ Field[] fields = clazz.getDeclaredFields();
+ fieldSet.addAll(Arrays.asList(fields));
+ clazz = clazz.getSuperclass();
+ }
+ fieldSet = fieldSet.stream().filter(field ->
+ field.isAnnotationPresent(EncryptField.class) && field.getType() == String.class)
+ .collect(Collectors.toSet());
+ for (Field field : fieldSet) {
+ field.setAccessible(true);
+ }
+ return fieldSet;
+ }
+
}
--
Gitblit v1.9.3