/**
-
Created by EalenXie on 2021/9/24 15:52
-
顶级的脱敏器
*/
public interface Desensitization {
/**
-
脱敏实现
-
@param target 脱敏对象
-
@return 脱敏返回结果
*/
T desensitize(T target);
}
比如具体的手机号脱敏器实现
import com.github.Symbol;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
-
Created by EalenXie on 2021/9/24 15:56
-
手机号脱敏器 默认只保留前3位和后4位
*/
public class PhoneDesensitization implements StringDesensitization {
/**
- 手机号正则
*/
private static final Pattern DEFAULT_PATTERN = Pattern.compile(“(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}”);
/**
- 手机号脱敏 只保留前3位和后4位
*/
@Override
public String desensitize(String target) {
Matcher matcher = DEFAULT_PATTERN.matcher(target);
while (matcher.find()) {
String group = matcher.group();
target = target.replace(group, group.substring(0, 3) + Symbol.getSymbol(4, Symbol.STAR) + group.substring(7, 11));
}
return target;
}
}
2.定义脱敏注解,并指明了使用的序列化器,注解中声明了使用的脱敏器实现
package com.github.annotation;
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.github.desensitization.Desensitization;
import com.github.serializer.ObjectDesensitizeSerializer;
import java.lang.annotation.*;
/**
- Created by EalenXie on 2021/10/8 11:30
*/
@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = ObjectDesensitizeSerializer.class)
@Documented
public @interface Desensitize {
/**
- 脱敏器实现
*/
@SuppressWarnings(“all”)
Class<? extends Desensitization<?>> desensitization();
}
3. 实现定义的序列化器
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import com.github.Symbol;
import com.github.annotation.Desensitize;
import com.github.desensitization.Desensitization;
import com.github.desensitization.DesensitizationFactory;
import com.github.desensitization.StringDesensitization;
import java.io.IOException;
/**
-
Created by EalenXie on 2021/8/9 9:03
-
脱敏序列化器
*/
public class ObjectDesensitizeSerializer extends StdSerializer implements ContextualSerializer {
private transient Desensitization desensitization;
protected ObjectDesensitizeSerializer() {
super(Object.class);
}
public Desensitization getDesensitization() {
return desensitization;
}
public void setDesensitization(Desensitization desensitization) {
this.desensitization = desensitization;
}
@Override
public JsonSerializer createContextual(SerializerProvider prov, BeanProperty property) {
Desensitize annotation = property.getAnnotation(Desensitize.class);
return createContextual(annotation.desensitization());
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习
已经将知识体系整理好(源码,笔记,PPT,学习视频)
你有帮助,可以添加下面V无偿领取!(备注Java)**
[外链图片转存中…(img-0bubSIEX-1711171988779)]
最后
我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习
已经将知识体系整理好(源码,笔记,PPT,学习视频)
[外链图片转存中…(img-TFg51TKV-1711171988779)]
[外链图片转存中…(img-RfHaCEaH-1711171988780)]
[外链图片转存中…(img-tXtcARih-1711171988780)]