脱敏测试

This commit is contained in:
b2baccline
2021-05-12 18:04:59 +08:00
parent 891f49b6f5
commit 514bb66de0
5 changed files with 62 additions and 5 deletions

View File

@@ -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 原文

View File

@@ -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;

View File

@@ -41,7 +41,7 @@ public class JsonSerializerModifier extends BeanSerializerModifier {
/**
* 得到脱敏注解
* @param beanProperty
* @param beanProperty BeanPropertyWriter
* @return 返回第一个获取的脱敏注解
*/
private Annotation getDesensitizeAnnotation(BeanPropertyWriter beanProperty) {

View File

@@ -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);

View File

@@ -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);
}
}