Java接口之脱敏工具

编程入门 行业动态 更新时间:2024-10-22 23:41:14

Java<a href=https://www.elefans.com/category/jswz/34/1771365.html style=接口之脱敏工具"/>

Java接口之脱敏工具

Desensitized.java

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** 脱敏注解** @author Jalon*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Desensitized {DesensitizedStrategy strategy();
}

DesensitizedStrategy.java

import java.util.function.Function;/*** 脱敏策略*/
public enum DesensitizedStrategy {/*** 姓名*/USERNAME(s -> s.replaceAll("(\\S)\\S(\\S*)", "$1*$2")),/*** 身份证号*/ID_CARD(s -> s.replaceAll("(\\d{6})\\d{8}(\\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 Function<String, String> desensitizer;DesensitizedStrategy(Function<String, String> desensitizer) {this.desensitizer = desensitizer;}public Function<String, String> desensitizer() {return desensitizer;}
}

DesensitizedUtils.java

import com.qdbeiqi.bpm.domain.library.configuration.Desensitized;
import com.qdbeiqi.bpm.domain.library.configuration.DesensitizedStrategy;import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;/*** 脱敏工具** @author Jalon* @since 2023/6/29 10:19**/
public class DesensitizedUtils {/*** 数组脱敏*/public static <T> void desensitizeList(List<T> objects, Class<T> clazz) throws IllegalAccessException {for (T object : objects) {desensitize(object, clazz);}}/*** 对象脱敏*/public static <T> void desensitize(T object, Class<T> clazz) throws IllegalAccessException {Objects.requireNonNull(object, "muset be not null!");//此处拿到对象,应该遍历对象所有变量的注解,并使用注解名称获取Map中对应的策略进行数据转换List<Field> allField = getFieldByCurrentAndSuper(clazz);if (allField.size() > 0) {for (Field field : allField) {// 设置可访问私有属性field.setAccessible(true);Desensitized annotation = field.getAnnotation(Desensitized.class);if (Objects.nonNull(annotation) && Objects.equals(String.class, field.getType())) {DesensitizedStrategy strategy = annotation.strategy();Object o = field.get(object);if (!Objects.isNull(o)) {String s = strategy.desensitizer().apply(String.valueOf(o));field.set(object, s);}}}}}/*** description: 从当前以及父类中获取全部字段** @param clazz 属性所在类* @return java.lang.reflect.Field*/public static List<Field> getFieldByCurrentAndSuper(Class<?> clazz) {List<Field> fields = new ArrayList<>();getFieldByCurrentAndSuper(clazz, fields);return fields;}/*** description: 从当前以及父类中获取全部字段** @param clazz 属性所在类* @return java.lang.reflect.Field*/private static List<Field> getFieldByCurrentAndSuper(Class<?> clazz, List<Field> fields) {Field[] declaredFields = clazz.getDeclaredFields();fields.addAll(Arrays.asList(declaredFields));if (!clazz.equals(Object.class)) {return getFieldByCurrentAndSuper(clazz.getSuperclass(), fields);}return fields;}
}

使用

List<VisitorInterviewVo> visitorInterviewVos = this.visitorInterviewService.queryByPage(interviewSearch);
DesensitizedUtils.desensitizeList(visitorInterviewVos, VisitorInterviewVo.class);
return ResponseResult.success(PageInfo.of(visitorInterviewVos));

更多推荐

Java接口之脱敏工具

本文发布于:2023-11-15 12:40:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1599804.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:接口   工具   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!