⚡ SimpleDesensitizationHandlerHolder.java 修改为 DesensitizationHandlerHolder,将 正则和滑动脱敏处理器也集中管理,方便直接获取复用实例
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
package com.hccake.ballcat.common.desensitize;
|
||||
|
||||
import com.hccake.ballcat.common.desensitize.handler.DesensitizationHandler;
|
||||
import com.hccake.ballcat.common.desensitize.handler.RegexDesensitizationHandler;
|
||||
import com.hccake.ballcat.common.desensitize.handler.SimpleDesensitizationHandler;
|
||||
import com.hccake.ballcat.common.desensitize.handler.SlideDesensitizationHandler;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* 脱敏处理器持有者
|
||||
* <p>
|
||||
* - 默认提供 Regex 和 Slide 类型的脱敏处理器 <br/>
|
||||
* - Simple 脱敏处理器则使用SPI方式加载,便于用户扩展处理
|
||||
* </p>
|
||||
*
|
||||
* @author Hccake 2021/1/22
|
||||
* @version 1.0
|
||||
*/
|
||||
public class DesensitizationHandlerHolder {
|
||||
|
||||
private final static Map<Class<? extends DesensitizationHandler>, DesensitizationHandler> MAP = new ConcurrentHashMap<>();
|
||||
|
||||
static {
|
||||
// 滑动脱敏处理器
|
||||
MAP.put(SlideDesensitizationHandler.class, new SlideDesensitizationHandler());
|
||||
// 正则脱敏处理器
|
||||
MAP.put(RegexDesensitizationHandler.class, new RegexDesensitizationHandler());
|
||||
// SPI 加载所有的 Simple脱敏类型处理
|
||||
ServiceLoader<SimpleDesensitizationHandler> loadedDrivers = ServiceLoader
|
||||
.load(SimpleDesensitizationHandler.class);
|
||||
for (SimpleDesensitizationHandler desensitizationHandler : loadedDrivers) {
|
||||
MAP.put(desensitizationHandler.getClass(), desensitizationHandler);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 DesensitizationHandler
|
||||
* @return 处理器实例
|
||||
*/
|
||||
public static DesensitizationHandler getHandler(Class<? extends DesensitizationHandler> handlerClass) {
|
||||
return MAP.get(handlerClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 RegexDesensitizationHandler
|
||||
* @return 处理器实例
|
||||
*/
|
||||
public static RegexDesensitizationHandler getRegexDesensitizationHandler() {
|
||||
return (RegexDesensitizationHandler) MAP.get(RegexDesensitizationHandler.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 SlideDesensitizationHandler
|
||||
* @return 处理器实例
|
||||
*/
|
||||
public static SlideDesensitizationHandler getSlideDesensitizationHandler() {
|
||||
return (SlideDesensitizationHandler) MAP.get(SlideDesensitizationHandler.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定的 SimpleDesensitizationHandler
|
||||
* @param handlerClass SimpleDesensitizationHandler的实现类
|
||||
* @return 处理器实例
|
||||
*/
|
||||
public static SimpleDesensitizationHandler getSimpleHandler(
|
||||
Class<? extends SimpleDesensitizationHandler> handlerClass) {
|
||||
return (SimpleDesensitizationHandler) MAP.get(handlerClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加Handler
|
||||
* @param handlerClass DesensitizationHandler的实现类
|
||||
* @param handler 处理器实例
|
||||
* @return handler 处理器实例
|
||||
*/
|
||||
public static DesensitizationHandler addHandler(Class<? extends DesensitizationHandler> handlerClass,
|
||||
DesensitizationHandler handler) {
|
||||
return MAP.put(handlerClass, handler);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
package com.hccake.ballcat.common.desensitize;
|
||||
|
||||
import com.hccake.ballcat.common.desensitize.handler.SimpleDesensitizationHandler;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* 脱敏处理器持有者,使用SPI方式加载所有的脱敏处理器,便于用户扩展处理
|
||||
*
|
||||
* @author Hccake 2021/1/22
|
||||
* @version 1.0
|
||||
*/
|
||||
public class SimpleDesensitizationHandlerHolder {
|
||||
|
||||
private final static Map<Class<? extends SimpleDesensitizationHandler>, SimpleDesensitizationHandler> MAP = new ConcurrentHashMap<>();
|
||||
|
||||
static {
|
||||
// SPI 加载所有的脱敏类型处理
|
||||
ServiceLoader<SimpleDesensitizationHandler> loadedDrivers = ServiceLoader
|
||||
.load(SimpleDesensitizationHandler.class);
|
||||
for (SimpleDesensitizationHandler desensitizationHandler : loadedDrivers) {
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.hccake.ballcat.common.desensitize;
|
||||
package com.hccake.ballcat.common.desensitize.json;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
@@ -7,14 +7,15 @@ import com.fasterxml.jackson.databind.JsonMappingException;
|
||||
import com.fasterxml.jackson.databind.JsonSerializer;
|
||||
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
|
||||
import com.hccake.ballcat.common.desensitize.annotation.JsonRegexDesensitize;
|
||||
import com.hccake.ballcat.common.desensitize.annotation.JsonSimpleDesensitize;
|
||||
import com.hccake.ballcat.common.desensitize.annotation.JsonSlideDesensitize;
|
||||
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.SlideDesensitizationHandler;
|
||||
import com.hccake.ballcat.common.desensitize.json.annotation.JsonRegexDesensitize;
|
||||
import com.hccake.ballcat.common.desensitize.json.annotation.JsonSimpleDesensitize;
|
||||
import com.hccake.ballcat.common.desensitize.json.annotation.JsonSlideDesensitize;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.annotation.Annotation;
|
||||
@@ -30,18 +31,11 @@ import java.util.Objects;
|
||||
*/
|
||||
public class JsonDesensitizeSerializer extends JsonSerializer<String> implements ContextualSerializer {
|
||||
|
||||
/**
|
||||
* json 脱敏处理注解
|
||||
*/
|
||||
private Annotation jsonDesensitizeAnnotation;
|
||||
|
||||
/**
|
||||
* 滑动脱敏处理器
|
||||
*/
|
||||
private final SlideDesensitizationHandler slideDesensitizationHandler = new SlideDesensitizationHandler();
|
||||
|
||||
/**
|
||||
* 正则脱敏处理器
|
||||
*/
|
||||
private final RegexDesensitizationHandler regexDesensitizationHandler = new RegexDesensitizationHandler();
|
||||
|
||||
/**
|
||||
* 脱敏注解Class列表
|
||||
*/
|
||||
@@ -56,8 +50,8 @@ public class JsonDesensitizeSerializer extends JsonSerializer<String> implements
|
||||
// Simple 类型处理
|
||||
JsonSimpleDesensitize an = (JsonSimpleDesensitize) this.jsonDesensitizeAnnotation;
|
||||
Class<? extends SimpleDesensitizationHandler> handlerClass = an.handler();
|
||||
SimpleDesensitizationHandler desensitizationHandler = SimpleDesensitizationHandlerHolder
|
||||
.getHandler(handlerClass);
|
||||
SimpleDesensitizationHandler desensitizationHandler = DesensitizationHandlerHolder
|
||||
.getSimpleHandler(handlerClass);
|
||||
Assert.notNull(desensitizationHandler, "SimpleDesensitizationHandler can not be Null");
|
||||
str = desensitizationHandler.handle(value);
|
||||
}
|
||||
@@ -65,6 +59,8 @@ public class JsonDesensitizeSerializer extends JsonSerializer<String> implements
|
||||
// 正则类型脱敏处理
|
||||
JsonRegexDesensitize an = (JsonRegexDesensitize) this.jsonDesensitizeAnnotation;
|
||||
RegexDesensitizationTypeEnum type = an.type();
|
||||
RegexDesensitizationHandler regexDesensitizationHandler = DesensitizationHandlerHolder
|
||||
.getRegexDesensitizationHandler();
|
||||
str = RegexDesensitizationTypeEnum.CUSTOM.equals(type)
|
||||
? regexDesensitizationHandler.handle(value, an.regex(), an.replacement())
|
||||
: regexDesensitizationHandler.handle(value, type);
|
||||
@@ -73,6 +69,8 @@ public class JsonDesensitizeSerializer extends JsonSerializer<String> implements
|
||||
// 滑动类型脱敏处理
|
||||
JsonSlideDesensitize an = (JsonSlideDesensitize) this.jsonDesensitizeAnnotation;
|
||||
SlideDesensitizationTypeEnum type = an.type();
|
||||
SlideDesensitizationHandler slideDesensitizationHandler = DesensitizationHandlerHolder
|
||||
.getSlideDesensitizationHandler();
|
||||
str = SlideDesensitizationTypeEnum.CUSTOM.equals(type) ? slideDesensitizationHandler.handle(value,
|
||||
an.leftPlainTextLen(), an.rightPlainTextLen(), an.maskString())
|
||||
: slideDesensitizationHandler.handle(value, type);
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.hccake.ballcat.common.desensitize.annotation;
|
||||
package com.hccake.ballcat.common.desensitize.json.annotation;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.hccake.ballcat.common.desensitize.JsonDesensitizeSerializer;
|
||||
import com.hccake.ballcat.common.desensitize.json.JsonDesensitizeSerializer;
|
||||
import com.hccake.ballcat.common.desensitize.enums.RegexDesensitizationTypeEnum;
|
||||
import com.hccake.ballcat.common.desensitize.handler.RegexDesensitizationHandler;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.hccake.ballcat.common.desensitize.annotation;
|
||||
package com.hccake.ballcat.common.desensitize.json.annotation;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.hccake.ballcat.common.desensitize.JsonDesensitizeSerializer;
|
||||
import com.hccake.ballcat.common.desensitize.json.JsonDesensitizeSerializer;
|
||||
import com.hccake.ballcat.common.desensitize.handler.SimpleDesensitizationHandler;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.hccake.ballcat.common.desensitize.annotation;
|
||||
package com.hccake.ballcat.common.desensitize.json.annotation;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.hccake.ballcat.common.desensitize.JsonDesensitizeSerializer;
|
||||
import com.hccake.ballcat.common.desensitize.json.JsonDesensitizeSerializer;
|
||||
import com.hccake.ballcat.common.desensitize.enums.SlideDesensitizationTypeEnum;
|
||||
import com.hccake.ballcat.common.desensitize.handler.SlideDesensitizationHandler;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.hccake.common.core.test.desensite;
|
||||
|
||||
import com.hccake.ballcat.common.desensitize.annotation.JsonRegexDesensitize;
|
||||
import com.hccake.ballcat.common.desensitize.annotation.JsonSimpleDesensitize;
|
||||
import com.hccake.ballcat.common.desensitize.annotation.JsonSlideDesensitize;
|
||||
import com.hccake.ballcat.common.desensitize.json.annotation.JsonRegexDesensitize;
|
||||
import com.hccake.ballcat.common.desensitize.json.annotation.JsonSimpleDesensitize;
|
||||
import com.hccake.ballcat.common.desensitize.json.annotation.JsonSlideDesensitize;
|
||||
import com.hccake.ballcat.common.desensitize.enums.RegexDesensitizationTypeEnum;
|
||||
import com.hccake.ballcat.common.desensitize.enums.SlideDesensitizationTypeEnum;
|
||||
import lombok.Data;
|
||||
|
||||
Reference in New Issue
Block a user