如何建个使用自己帐户的网站,绵阳网站设计制作,免费动画制作app哪个好用,陕西省建设厅特种工报名网站背景
要求对接口中含有的电话、身份证、名字进行脱敏处理显示部分数据#xff0c;并对老的接口同步改造#xff0c;由于改动部分较多。想到了利用自定义注解配合切面处理#xff0c;减少对原本接口的改动。
注意#xff1a;注解及切面只针对String类型的属性有效
注解定…背景
要求对接口中含有的电话、身份证、名字进行脱敏处理显示部分数据并对老的接口同步改造由于改动部分较多。想到了利用自定义注解配合切面处理减少对原本接口的改动。
注意注解及切面只针对String类型的属性有效
注解定义
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;Target(ElementType.FIELD)
Retention(RetentionPolicy.RUNTIME)
public interface Desensitize {DesensitizeStrategy value() ;
}切面定义
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;import java.lang.reflect.Field;
import java.util.Objects;Aspect
Component
public class DesensitizeAspect {Pointcut(execution(* com.demo.controller..*(..)))public void desensitize() {}Around(desensitize())public Object doDesensitize(ProceedingJoinPoint joinPoint) throws Throwable {Object result joinPoint.proceed();if (result ! null) {Field[] fields result.getClass().getDeclaredFields();for (Field field : fields) {if (field.isAnnotationPresent(Desensitize.class)) {field.setAccessible(true);Object value field.get(result);//判断只有字段为字符串同时具有Desensitize注解才生效if (value instanceof String) {Desensitize annotation field.getAnnotation(Desensitize.class);DesensitizeStrategy strategy annotation.value();if (Objects.nonNull(strategy)) {field.set(result, strategy.desensitizer().apply(value.toString()));}}}}}return result;}}策略枚举
import java.util.function.Function;/*** 脱敏策略枚举类针对不同的数据定制特定的策略*/
public enum DesensitizeStrategy {/*** 用户名*/USERNAME(s - s.replaceAll((\\S)\\S(\\S*), $1*$2)),/*** 身份证*/ID_CARD(s - s.replaceAll((\\d{4})\\d{10}(\\w{4}), $1****$2)),/*** 手机号*/PHONE(s - s.replaceAll((\\d{3})\\d{4}(\\d{4}), $1****$2)),/*** 地址*/ADDRESS(s - s.replaceAll((\\S{3})\\S{2}(\\S*)\\S{2}, $1****$2****));private final FunctionString, String desensitizer;DesensitizeStrategy(FunctionString, String desensitizer) {this.desensitizer desensitizer;}public FunctionString, String desensitizer() {return desensitizer;}
}