diff --git a/README.md b/README.md index 18cc8709638bb2a5635667c2b45a65ed4273d913..1773ce99bf95ec91b56f7923e882cfa85c1d8ea5 100644 --- a/README.md +++ b/README.md @@ -97,3 +97,13 @@ public Obj test(){ ![输入图片说明](src/main/resources/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220823111833.jpg) ## 8、关注我 ![欢迎关注公众号](https://images.gitee.com/uploads/images/2018/0726/081557_aa7756c9_660787.jpeg "陌与尘埃") + +## 9、更新日志 +* V1.0.0 +> 基础版 + +* V1.0.1 +> 支持复杂对象,多层嵌套属性自动脱敏 + +* V1.0.2 +> 优化包引用 diff --git a/pom.xml b/pom.xml index 05d3c8a5d6fffd594d81c86e224d8187d6fc3ad3..9cf947232ae0dfbcf7fba7503d7034384b0f4939 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 io.gitee.chemors secure-ext-spring-boot-starter - 1.0.0-RELEASE + 1.0.2-RELEASE secure-ext-spring-boot-starter secure-ext-spring-boot-starter https://gitee.com/chemors/secure-ext-spring-boot-starter @@ -27,7 +27,7 @@ org.springframework.boot spring-boot-configuration-processor ${springboot.version} - true + compile diff --git a/src/main/java/com/mos/secure/ext/aspect/SensitiveAspect.java b/src/main/java/com/mos/secure/ext/aspect/SensitiveAspect.java index 6ab82013cc06b124a5cba966e3dfbaec87f93d7d..301fe82720bb665c1d75e8c4c66d3017f656f578 100644 --- a/src/main/java/com/mos/secure/ext/aspect/SensitiveAspect.java +++ b/src/main/java/com/mos/secure/ext/aspect/SensitiveAspect.java @@ -1,5 +1,6 @@ package com.mos.secure.ext.aspect; +import cn.hutool.core.util.StrUtil; import com.mos.secure.ext.annotations.Desensitization; import com.mos.secure.ext.annotations.DesensitizationProp; import com.mos.secure.ext.config.SensitiveProp; @@ -13,8 +14,10 @@ import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.util.Arrays; import java.util.List; /** @@ -59,6 +62,8 @@ public class SensitiveAspect { return sensitiveFormat(joinPoint); } + + /** * 注解统一拦截器 * @@ -68,26 +73,26 @@ public class SensitiveAspect { */ public Object sensitiveFormat(ProceedingJoinPoint joinPoint) throws Throwable { Object obj = joinPoint.proceed(); - if (obj instanceof List) { + dealNode(obj); + /* if (obj instanceof List) { dealList(obj); } else { dealSimpleData(obj); - } + }*/ return obj; } private void dealList(Object o) throws IllegalAccessException { List list = (List) o; for (Object obj : list) { - dealSimpleData(obj); + dealNode(obj); } } - private void dealSimpleData(Object obj) throws IllegalAccessException { + /* private void dealSimpleData(Object obj) throws IllegalAccessException { Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); - // TODO: 2022/8/22 0022 递归子属性 DesensitizationProp desensitizationProp = field.getAnnotation(DesensitizationProp.class); if (desensitizationProp == null) { continue; @@ -95,8 +100,47 @@ public class SensitiveAspect { String v = MosDesensitizedUtil.desensitizeData(field.get(obj),desensitizationProp); field.set(obj, v); } + }*/ + + + public void dealNode(Object o) throws IllegalAccessException { + if (o instanceof List){ + dealList(o); + return; + } + if (o == null){ + return; + } + boolean needDepthDeal = sensitiveProp.getDepth() && !StrUtil.isBlankIfStr(sensitiveProp.getPackages()); + Field[] fields = o.getClass().getDeclaredFields(); + for (Field field : fields){ + field.setAccessible(true); + String type = field.getGenericType().toString(); + // 递归子属性 + if (needDepthDeal && containType(type)){ + dealNode(field.get(o)); + } + + DesensitizationProp desensitizationProp = field.getAnnotation(DesensitizationProp.class); + if (desensitizationProp == null) { + continue; + } + String v = MosDesensitizedUtil.desensitizeData(field.get(o),desensitizationProp); + field.set(o, v); + } } + private Boolean containType(String type){ + String[] scanPackages = sensitiveProp.getPackages().split(","); + boolean isContainType = false; + for (String scanPackage : scanPackages){ + if (type.contains(scanPackage)){ + isContainType = true; + break; + } + } + return isContainType; + } } diff --git a/src/main/java/com/mos/secure/ext/config/SensitiveProp.java b/src/main/java/com/mos/secure/ext/config/SensitiveProp.java index a3a6b3bb086f817e5c354fb0481a485809965005..83bad452a094e81454e8b5e5b4366f0bcb0cf4b5 100644 --- a/src/main/java/com/mos/secure/ext/config/SensitiveProp.java +++ b/src/main/java/com/mos/secure/ext/config/SensitiveProp.java @@ -15,5 +15,9 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties @Data public class SensitiveProp { - Boolean enable; + Boolean enable = true; + + Boolean depth = false; + + String packages = null; } diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 399e81ef0ef8f4fee682f2d3b9dd5db6a1d6914a..d4852c872d5a3adf67613107fb03f83568b9446e 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -1,2 +1,4 @@ sensitive: enable: true + depth: false + packages: com.mos.secure