SimpleDesensitizationHandlerHolder.java 修改为 DesensitizationHandlerHolder,将 正则和滑动脱敏处理器也集中管理,方便直接获取复用实例

This commit is contained in:
b2baccline
2021-02-26 19:05:40 +08:00
parent 3d58ea863f
commit 93b1e5836e
10 changed files with 111 additions and 82 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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