feat: 支持 vo 返回的脱敏
parent
61a34ddac5
commit
c60f8d6da2
@ -1,21 +0,0 @@
|
||||
package cn.iocoder.yudao.framework.desensitize.annotation.constraints;
|
||||
|
||||
import cn.iocoder.yudao.framework.desensitize.annotation.SliderDesensitize;
|
||||
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 中文名
|
||||
*/
|
||||
@Documented
|
||||
@Target({ElementType.FIELD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@JacksonAnnotationsInside
|
||||
@SliderDesensitize(prefixKeep = 1, suffixKeep = 0, replacer = "*") // 中文名;比如:刘子豪脱敏之后为刘**
|
||||
public @interface ChineseNameDesensitize {
|
||||
}
|
||||
9
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/handler/DesensitizationHandlerHolder.java → yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/base/DesensitizationHandlerHolder.java
9
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/handler/DesensitizationHandlerHolder.java → yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/base/DesensitizationHandlerHolder.java
@ -0,0 +1,19 @@
|
||||
package cn.iocoder.yudao.framework.desensitize.core.base.handler;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
|
||||
/**
|
||||
* 脱敏处理器接口
|
||||
*/
|
||||
public interface DesensitizationHandler<T extends Annotation> {
|
||||
|
||||
/**
|
||||
* 脱敏
|
||||
*
|
||||
* @param origin 原始字符串
|
||||
* @param anno 注解信息
|
||||
* @return 脱敏后的字符串
|
||||
*/
|
||||
String desensitize(String origin, T anno);
|
||||
|
||||
}
|
||||
7
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/annotation/RegexDesensitize.java → yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/annotation/RegexDesensitize.java
7
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/annotation/RegexDesensitize.java → yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/annotation/RegexDesensitize.java
@ -0,0 +1,25 @@
|
||||
package cn.iocoder.yudao.framework.desensitize.core.regex.handler;
|
||||
|
||||
import cn.iocoder.yudao.framework.desensitize.core.base.handler.DesensitizationHandler;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
|
||||
public abstract class AbstractRegexDesensitizationHandler<T extends Annotation> implements DesensitizationHandler<T> {
|
||||
|
||||
@Override
|
||||
public String desensitize(String origin, T anno) {
|
||||
Object[] args = getArgs(anno);
|
||||
String regex = (String) args[0];
|
||||
String replacer = (String) args[1];
|
||||
|
||||
return origin.replaceAll(regex, replacer);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取注解的参数
|
||||
*
|
||||
* @param anno 注解信息
|
||||
* @return 注解的参数
|
||||
*/
|
||||
abstract Object[] getArgs(T anno);
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package cn.iocoder.yudao.framework.desensitize.core.regex.handler;
|
||||
|
||||
import cn.iocoder.yudao.framework.desensitize.core.regex.annotation.RegexDesensitize;
|
||||
|
||||
/**
|
||||
* 正则脱敏处理器
|
||||
*/
|
||||
public class DefaultRegexDesensitizationHandler extends AbstractRegexDesensitizationHandler<RegexDesensitize> {
|
||||
|
||||
@Override
|
||||
Object[] getArgs(RegexDesensitize anno) {
|
||||
return new Object[]{anno.regex(), anno.replacer()};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
package cn.iocoder.yudao.framework.desensitize.core.regex.handler;
|
||||
|
||||
import cn.iocoder.yudao.framework.desensitize.core.regex.annotation.EmailDesensitize;
|
||||
|
||||
public class EmailDesensitizationHandler extends AbstractRegexDesensitizationHandler<EmailDesensitize> {
|
||||
|
||||
@Override
|
||||
Object[] getArgs(EmailDesensitize anno) {
|
||||
return new Object[]{anno.regex(), anno.replacer()};
|
||||
}
|
||||
}
|
||||
31
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/handler/SliderDesensitizationHandler.java → yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/AbstractDesensitizationHandler.java
31
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/handler/SliderDesensitizationHandler.java → yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/AbstractDesensitizationHandler.java
@ -0,0 +1,11 @@
|
||||
package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
|
||||
|
||||
import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.BankCard;
|
||||
|
||||
public class BankCardDesensitization extends AbstractDesensitizationHandler<BankCard> {
|
||||
|
||||
@Override
|
||||
Object[] getArgs(BankCard anno) {
|
||||
return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
|
||||
|
||||
import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.CarLicense;
|
||||
|
||||
public class CarLicenseDesensitization extends AbstractDesensitizationHandler<CarLicense> {
|
||||
@Override
|
||||
Object[] getArgs(CarLicense anno) {
|
||||
return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
|
||||
|
||||
import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.ChineseName;
|
||||
|
||||
public class ChineseNameDesensitization extends AbstractDesensitizationHandler<ChineseName> {
|
||||
@Override
|
||||
Object[] getArgs(ChineseName anno) {
|
||||
return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
|
||||
|
||||
import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.Slider;
|
||||
|
||||
/**
|
||||
* 滑动脱敏处理器
|
||||
*/
|
||||
public class DefaultDesensitizationHandler extends AbstractDesensitizationHandler<Slider> {
|
||||
|
||||
@Override
|
||||
Object[] getArgs(Slider anno) {
|
||||
return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
|
||||
|
||||
import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.FixedPhone;
|
||||
|
||||
public class FixedPhoneDesensitization extends AbstractDesensitizationHandler<FixedPhone> {
|
||||
@Override
|
||||
Object[] getArgs(FixedPhone anno) {
|
||||
return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
|
||||
|
||||
import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.IdCard;
|
||||
|
||||
public class IdCardDesensitization extends AbstractDesensitizationHandler<IdCard> {
|
||||
@Override
|
||||
Object[] getArgs(IdCard anno) {
|
||||
return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
|
||||
|
||||
import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.Password;
|
||||
|
||||
public class PasswordDesensitization extends AbstractDesensitizationHandler<Password> {
|
||||
@Override
|
||||
Object[] getArgs(Password anno) {
|
||||
return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
|
||||
|
||||
import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.PhoneNumber;
|
||||
|
||||
public class PhoneNumberDesensitization extends AbstractDesensitizationHandler<PhoneNumber> {
|
||||
|
||||
@Override
|
||||
Object[] getArgs(PhoneNumber anno) {
|
||||
return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
|
||||
}
|
||||
}
|
||||
@ -1,28 +0,0 @@
|
||||
package cn.iocoder.yudao.framework.desensitize.handler;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
|
||||
/**
|
||||
* 脱敏处理器接口
|
||||
*/
|
||||
public interface DesensitizationHandler<T extends Annotation> {
|
||||
|
||||
/**
|
||||
* 脱敏
|
||||
*
|
||||
* @param origin 原始字符串
|
||||
* @param arg 参数
|
||||
* @return 脱敏后的字符串
|
||||
*/
|
||||
String desensitize(String origin, Object... arg);
|
||||
|
||||
/**
|
||||
* 获取注解参数
|
||||
*
|
||||
* @param anno 注解
|
||||
* @return 注解参数
|
||||
*/
|
||||
default Object[] getAnnotationArgs(T anno) {
|
||||
return new Object[0];
|
||||
}
|
||||
}
|
||||
@ -1,23 +0,0 @@
|
||||
package cn.iocoder.yudao.framework.desensitize.handler;
|
||||
|
||||
import cn.iocoder.yudao.framework.desensitize.annotation.RegexDesensitize;
|
||||
|
||||
/**
|
||||
* 正则脱敏处理器
|
||||
*/
|
||||
public class RegexDesensitizationHandler implements DesensitizationHandler<RegexDesensitize> {
|
||||
|
||||
@Override
|
||||
public String desensitize(String origin, Object... arg) {
|
||||
String regex = (String) arg[0];
|
||||
String replacer = (String) arg[1];
|
||||
|
||||
return origin.replaceAll(regex, replacer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getAnnotationArgs(RegexDesensitize anno) {
|
||||
return new Object[]{anno.regex(), anno.replacer()};
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,25 +0,0 @@
|
||||
package cn.iocoder.yudao.framework.desensitize.handler;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class DesensitizationHandlerTest {
|
||||
|
||||
@Test
|
||||
public void testSliderDesensitizationHandler() {
|
||||
DesensitizationHandler handler = DesensitizationHandlerHolder.getDesensitizationHandler(SliderDesensitizationHandler.class);
|
||||
|
||||
Assertions.assertEquals("A****FG", handler.desensitize("ABCDEFG", 1, 2, "*"));
|
||||
Assertions.assertEquals("芋**码", handler.desensitize("芋道源码", 1, 1, "*"));
|
||||
Assertions.assertEquals("****", handler.desensitize("芋道源码", 4, 0, "*"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegexDesensitizationHandler() {
|
||||
DesensitizationHandler handler = DesensitizationHandlerHolder.getDesensitizationHandler(RegexDesensitizationHandler.class);
|
||||
|
||||
Assertions.assertEquals("e****@gmail.com", handler.desensitize("example@gmail.com", "(^.)[^@]*(@.*$)", "$1****$2"));
|
||||
Assertions.assertEquals("***,铁***", handler.desensitize("他妈的,铁废物", "他妈的|去你大爷|卧槽|草泥马|废物", "***"));
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue