mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 18:28:43 +08:00 
			
		
		
		
	feat: 支持 vo 返回的脱敏
This commit is contained in:
		| @@ -1,16 +1,28 @@ | ||||
| package cn.iocoder.yudao.framework.desensitize.handler; | ||||
|  | ||||
| import java.lang.annotation.Annotation; | ||||
|  | ||||
| /** | ||||
|  * 脱敏处理器接口 | ||||
|  */ | ||||
| public interface DesensitizationHandler { | ||||
| public interface DesensitizationHandler<T extends Annotation> { | ||||
|  | ||||
|     /** | ||||
|      * 脱敏 | ||||
|      * | ||||
|      * @param origin 原始字符串 | ||||
|      * @param arg    参数 | ||||
|      * @return 脱敏后的字符串 | ||||
|      */ | ||||
|     String desensitize(String origin, Object... arg); | ||||
|  | ||||
|     /** | ||||
|      * 获取注解参数 | ||||
|      * | ||||
|      * @param anno 注解 | ||||
|      * @return 注解参数 | ||||
|      */ | ||||
|     default Object[] getAnnotationArgs(T anno) { | ||||
|         return new Object[0]; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,9 +1,11 @@ | ||||
| package cn.iocoder.yudao.framework.desensitize.handler; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.desensitize.annotation.RegexDesensitize; | ||||
|  | ||||
| /** | ||||
|  * 正则脱敏处理器 | ||||
|  */ | ||||
| public class RegexDesensitizationHandler implements DesensitizationHandler { | ||||
| public class RegexDesensitizationHandler implements DesensitizationHandler<RegexDesensitize> { | ||||
|  | ||||
|     @Override | ||||
|     public String desensitize(String origin, Object... arg) { | ||||
| @@ -13,4 +15,9 @@ public class RegexDesensitizationHandler implements DesensitizationHandler { | ||||
|         return origin.replaceAll(regex, replacer); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Object[] getAnnotationArgs(RegexDesensitize anno) { | ||||
|         return new Object[]{anno.regex(), anno.replacer()}; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -1,9 +1,11 @@ | ||||
| package cn.iocoder.yudao.framework.desensitize.handler; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.desensitize.annotation.SliderDesensitize; | ||||
|  | ||||
| /** | ||||
|  * 滑动脱敏处理器 | ||||
|  */ | ||||
| public class SliderDesensitizationHandler implements DesensitizationHandler { | ||||
| public class SliderDesensitizationHandler implements DesensitizationHandler<SliderDesensitize> { | ||||
|  | ||||
|     @Override | ||||
|     public String desensitize(String origin, Object... arg) { | ||||
| @@ -29,6 +31,11 @@ public class SliderDesensitizationHandler implements DesensitizationHandler { | ||||
|                 origin.substring(prefixKeep + interval); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Object[] getAnnotationArgs(SliderDesensitize anno) { | ||||
|         return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()}; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 根据长度循环构建替换符 | ||||
|      * | ||||
|   | ||||
| @@ -18,6 +18,7 @@ import com.fasterxml.jackson.databind.ser.ContextualSerializer; | ||||
| import com.fasterxml.jackson.databind.ser.std.StdSerializer; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.lang.annotation.Annotation; | ||||
| import java.lang.reflect.Field; | ||||
|  | ||||
| /** | ||||
| @@ -64,7 +65,7 @@ public class StringDesensitizeSerializer extends StdSerializer<String> implement | ||||
|         // 滑动处理器 | ||||
|         SliderDesensitize sliderDesensitize = ArrayUtil.firstNonNull(AnnotationUtil.getCombinationAnnotations(field, SliderDesensitize.class)); | ||||
|         if (sliderDesensitize != null) { | ||||
|             value = this.desensitizationHandler.desensitize(value, sliderDesensitize.prefixKeep(), sliderDesensitize.suffixKeep(), sliderDesensitize.replacer()); | ||||
|             value = this.desensitizationHandler.desensitize(value, this.desensitizationHandler.getAnnotationArgs(sliderDesensitize)); | ||||
|             gen.writeString(value); | ||||
|             return; | ||||
|         } | ||||
| @@ -72,15 +73,24 @@ public class StringDesensitizeSerializer extends StdSerializer<String> implement | ||||
|         // 正则处理器 | ||||
|         RegexDesensitize regexDesensitize = ArrayUtil.firstNonNull(AnnotationUtil.getCombinationAnnotations(field, RegexDesensitize.class)); | ||||
|         if (regexDesensitize != null) { | ||||
|             value = this.desensitizationHandler.desensitize(value, regexDesensitize.regex(), regexDesensitize.replacer()); | ||||
|             value = this.desensitizationHandler.desensitize(value, this.desensitizationHandler.getAnnotationArgs(regexDesensitize)); | ||||
|             gen.writeString(value); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // 自定义处理器 | ||||
|         Desensitize desensitize = ArrayUtil.firstNonNull(AnnotationUtil.getCombinationAnnotations(field, Desensitize.class)); | ||||
|         if (desensitize != null) { | ||||
|             value = this.desensitizationHandler.desensitize(value); | ||||
|         Desensitize[] annotations = AnnotationUtil.getCombinationAnnotations(field, Desensitize.class); | ||||
|         if (ArrayUtil.isEmpty(annotations)) { | ||||
|             gen.writeString(value); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         for (Annotation annotation : field.getAnnotations()) { | ||||
|             if (AnnotationUtil.hasAnnotation(annotation.annotationType(), Desensitize.class)) { | ||||
|                 value = this.desensitizationHandler.desensitize(value, this.desensitizationHandler.getAnnotationArgs(annotation)); | ||||
|                 gen.writeString(value); | ||||
|                 return; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         gen.writeString(value); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 gaibu
					gaibu