✅ 脱敏测试
This commit is contained in:
@@ -10,6 +10,17 @@ import com.hccake.ballcat.common.desensitize.enums.SlideDesensitizationTypeEnum;
|
||||
*/
|
||||
public class SlideDesensitizationHandler implements DesensitizationHandler {
|
||||
|
||||
/**
|
||||
* 滑动脱敏
|
||||
* @param origin 原文
|
||||
* @param leftPlainTextLen 处理完后左边的明文数
|
||||
* @param rightPlainTextLen 处理完后右边的明文数
|
||||
* @return 脱敏后的字符串
|
||||
*/
|
||||
public String handle(String origin, int leftPlainTextLen, int rightPlainTextLen) {
|
||||
return this.handle(origin, leftPlainTextLen, rightPlainTextLen, "*");
|
||||
}
|
||||
|
||||
/**
|
||||
* 滑动脱敏
|
||||
* @param origin 原文
|
||||
|
||||
@@ -20,12 +20,12 @@ public class JsonDesensitizeSerializer<T> extends JsonSerializer<T> {
|
||||
/**
|
||||
* json 脱敏处理注解
|
||||
*/
|
||||
private Annotation jsonDesensitizeAnnotation;
|
||||
private final Annotation jsonDesensitizeAnnotation;
|
||||
|
||||
/**
|
||||
* 脱敏注解条件工具类
|
||||
*/
|
||||
private DesensitizeStrategy desensitizeStrategy;
|
||||
private final DesensitizeStrategy desensitizeStrategy;
|
||||
|
||||
public JsonDesensitizeSerializer(Annotation jsonDesensitizeAnnotation, DesensitizeStrategy desensitizeStrategy) {
|
||||
this.jsonDesensitizeAnnotation = jsonDesensitizeAnnotation;
|
||||
|
||||
@@ -41,7 +41,7 @@ public class JsonSerializerModifier extends BeanSerializerModifier {
|
||||
|
||||
/**
|
||||
* 得到脱敏注解
|
||||
* @param beanProperty
|
||||
* @param beanProperty BeanPropertyWriter
|
||||
* @return 返回第一个获取的脱敏注解
|
||||
*/
|
||||
private Annotation getDesensitizeAnnotation(BeanPropertyWriter beanProperty) {
|
||||
|
||||
@@ -3,6 +3,13 @@ package com.hccake.common.core.test.desensite;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.hccake.ballcat.common.desensitize.DesensitizationHandlerHolder;
|
||||
import com.hccake.ballcat.common.desensitize.enums.RegexDesensitizationTypeEnum;
|
||||
import com.hccake.ballcat.common.desensitize.enums.SlideDesensitizationTypeEnum;
|
||||
import com.hccake.ballcat.common.desensitize.handler.RegexDesensitizationHandler;
|
||||
import com.hccake.ballcat.common.desensitize.handler.SimpleDesensitizationHandler;
|
||||
import com.hccake.ballcat.common.desensitize.handler.SixAsteriskDesensitizationHandler;
|
||||
import com.hccake.ballcat.common.desensitize.handler.SlideDesensitizationHandler;
|
||||
import com.hccake.ballcat.common.desensitize.json.JsonSerializerModifier;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -17,7 +24,46 @@ class DesensitisedTest {
|
||||
private final ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
@Test
|
||||
void test1() throws JsonProcessingException {
|
||||
void testSimple() {
|
||||
// 获取简单脱敏处理器
|
||||
SimpleDesensitizationHandler desensitizationHandler = DesensitizationHandlerHolder
|
||||
.getSimpleHandler(SixAsteriskDesensitizationHandler.class);
|
||||
String origin = "你好吗?"; // 原始字符串
|
||||
String target = desensitizationHandler.handle(origin); // 替换处理
|
||||
Assert.isTrue("******".equals(target));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRegex() {
|
||||
// 获取正则脱敏处理器
|
||||
RegexDesensitizationHandler desensitizationHandler = DesensitizationHandlerHolder
|
||||
.getRegexDesensitizationHandler();
|
||||
String origin = "12123124213@qq.com"; // 原始字符串
|
||||
String regex = "(^.)[^@]*(@.*$)"; // 正则表达式
|
||||
String replacement = "$1****$2"; // 占位替换表达式
|
||||
String target1 = desensitizationHandler.handle(origin, regex, replacement); // 替换处理
|
||||
Assert.isTrue("1****@qq.com".equals(target1));
|
||||
|
||||
// 内置的正则脱敏类型
|
||||
String target2 = desensitizationHandler.handle(origin, RegexDesensitizationTypeEnum.EMAIL);
|
||||
Assert.isTrue("1****@qq.com".equals(target2));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSlide() {
|
||||
// 获取滑动脱敏处理器
|
||||
SlideDesensitizationHandler desensitizationHandler = DesensitizationHandlerHolder
|
||||
.getSlideDesensitizationHandler();
|
||||
String origin = "15805516789"; // 原始字符串
|
||||
String target1 = desensitizationHandler.handle(origin, 3, 2); // 替换处理
|
||||
Assert.isTrue("158******89".equals(target1));
|
||||
|
||||
String target2 = desensitizationHandler.handle(origin, SlideDesensitizationTypeEnum.PHONE_NUMBER); // 替换处理
|
||||
Assert.isTrue("158******89".equals(target2));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testJackson() throws JsonProcessingException {
|
||||
// 指定DesensitizeHandler 若ignore方法为true 则忽略脱敏 false 则启用脱敏
|
||||
JsonSerializerModifier modifier = new JsonSerializerModifier((fieldName) -> {
|
||||
log.info("当前字段名称{}", fieldName);
|
||||
|
||||
@@ -41,10 +41,10 @@ class CustomDesensitisedTest {
|
||||
.setPassword("admina123456").setPhoneNumber("15800000000").setTestField("这是测试属性")
|
||||
.setCustomDesensitize("自定义属性");
|
||||
String value = objectMapper.writeValueAsString(user);
|
||||
log.info("脱敏后的数据:{}", value);
|
||||
Assert.isTrue(
|
||||
"{\"username\":\"xiaoming\",\"password\":\"adm****56\",\"email\":\"c****@foxmail.com\",\"phoneNumber\":\"158******00\",\"testField\":\"TEST-这是测试属性\",\"customDesensitize\":\"customer rule自定义属性\"}"
|
||||
.equals(value));
|
||||
log.info("脱敏后的数据:{}", value);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user