🎨 JsonSimpleDesensitize 直接使用class 指定使用的handler,更方便直观

This commit is contained in:
b2baccline
2021-01-25 10:55:17 +08:00
parent cdebe942fb
commit 9ba901b95c
7 changed files with 27 additions and 38 deletions

View File

@@ -55,9 +55,9 @@ public class JsonDesensitizeSerializer extends JsonSerializer<String> implements
if (jsonDesensitizeAnnotation instanceof JsonSimpleDesensitize) {
// Simple 类型处理
JsonSimpleDesensitize an = (JsonSimpleDesensitize) this.jsonDesensitizeAnnotation;
String type = an.type();
SimpleDesensitizationHandler desensitizationHandler = SimpleDesensitizationHandlerHolder.TYPE_MAPS
.get(type);
Class<? extends SimpleDesensitizationHandler> handlerClass = an.handler();
SimpleDesensitizationHandler desensitizationHandler = SimpleDesensitizationHandlerHolder
.getHandler(handlerClass);
Assert.notNull(desensitizationHandler, "SimpleDesensitizationHandler can not be Null");
str = desensitizationHandler.handle(value);
}

View File

@@ -14,15 +14,35 @@ import java.util.concurrent.ConcurrentHashMap;
*/
public class SimpleDesensitizationHandlerHolder {
public final static Map<String, SimpleDesensitizationHandler> TYPE_MAPS = new ConcurrentHashMap<>();
private final static Map<Class<? extends SimpleDesensitizationHandler>, SimpleDesensitizationHandler> MAP = new ConcurrentHashMap<>();
static {
// SPI 加载所有的脱敏类型处理
ServiceLoader<SimpleDesensitizationHandler> loadedDrivers = ServiceLoader
.load(SimpleDesensitizationHandler.class);
for (SimpleDesensitizationHandler desensitizationHandler : loadedDrivers) {
TYPE_MAPS.put(desensitizationHandler.getType(), desensitizationHandler);
MAP.put(desensitizationHandler.getClass(), desensitizationHandler);
}
}
/**
* 获取Handler
* @param handlerClass SimpleDesensitizationHandler的实现类
* @return 处理器实例
*/
public static SimpleDesensitizationHandler getHandler(Class<? extends SimpleDesensitizationHandler> handlerClass) {
return MAP.get(handlerClass);
}
/**
* 添加Handler
* @param handlerClass SimpleDesensitizationHandler的实现类
* @param handler 处理器实例
* @return handler 处理器实例
*/
public static SimpleDesensitizationHandler addHandler(Class<? extends SimpleDesensitizationHandler> handlerClass,
SimpleDesensitizationHandler handler) {
return MAP.put(handlerClass, handler);
}
}

View File

@@ -22,9 +22,8 @@ public @interface JsonSimpleDesensitize {
/**
* 脱敏类型,用于指定脱敏处理器
* @see SimpleDesensitizationHandler#getType()
* @return type
*/
String type();
Class<? extends SimpleDesensitizationHandler> handler();
}

View File

@@ -1,7 +1,5 @@
package com.hccake.ballcat.common.core.desensite.handler;
import com.hccake.ballcat.common.core.desensite.handler.DesensitizationHandler;
/**
* 简单的脱敏处理器,传入源数据直接返回脱敏后的数据
*
@@ -10,12 +8,6 @@ import com.hccake.ballcat.common.core.desensite.handler.DesensitizationHandler;
*/
public interface SimpleDesensitizationHandler extends DesensitizationHandler {
/**
* 脱敏类型
* @return 类型
*/
String getType();
/**
* 脱敏处理
* @param origin 原始字符串

View File

@@ -8,21 +8,6 @@ package com.hccake.ballcat.common.core.desensite.handler;
*/
public class SixAsteriskDesensitizationHandler implements SimpleDesensitizationHandler {
/**
* 定长脱敏总是6个星号不管原文是啥
* @see SixAsteriskDesensitizationHandler
*/
public static final String TYPE = "SIX_ASTERISK";
/**
* 脱敏类型
* @return 类型
*/
@Override
public String getType() {
return TYPE;
}
/**
* 脱敏处理
* @param origin 原始字符串

View File

@@ -42,7 +42,7 @@ public class DesensitizationUser {
/**
* 测试自定义脱敏
*/
@JsonSimpleDesensitize(type = TestDesensitizationHandler.TYPE)
@JsonSimpleDesensitize(handler = TestDesensitizationHandler.class)
private String testField;
}

View File

@@ -8,13 +8,6 @@ import com.hccake.ballcat.common.core.desensite.handler.SimpleDesensitizationHan
*/
public class TestDesensitizationHandler implements SimpleDesensitizationHandler {
public final static String TYPE = "TEST";
@Override
public String getType() {
return TYPE;
}
@Override
public String handle(String s) {
return "TEST-" + s;