完善脱敏组件的注释

This commit is contained in:
YunaiV 2023-01-21 13:18:52 +08:00
parent d5e54288c1
commit b43813ab96
17 changed files with 94 additions and 15 deletions

View File

@ -30,7 +30,7 @@ public @interface EmailDesensitize {
/** /**
* 替换规则邮箱; * 替换规则邮箱;
* *
* 比如example@gmail.com 脱敏之后 e****@gmail.com * 比如example@gmail.com 脱敏之后 e****@gmail.com
*/ */
String replacer() default "$1****$2"; String replacer() default "$1****$2";
} }

View File

@ -33,7 +33,7 @@ public @interface BankCardDesensitize {
int suffixKeep() default 2; int suffixKeep() default 2;
/** /**
* 替换规则银行卡号;比如9988002866797031脱敏之后为998800********31 * 替换规则银行卡号; 比如9988002866797031 脱敏之后为 998800********31
*/ */
String replacer() default "*"; String replacer() default "*";

View File

@ -33,7 +33,7 @@ public @interface CarLicenseDesensitize {
int suffixKeep() default 1; int suffixKeep() default 1;
/** /**
* 替换规则车牌号;比如粤A66666脱敏之后为粤A6***6 * 替换规则车牌号;比如粤A66666 脱敏之后为粤A6***6
*/ */
String replacer() default "*"; String replacer() default "*";

View File

@ -33,7 +33,7 @@ public @interface FixedPhoneDesensitize {
int suffixKeep() default 2; int suffixKeep() default 2;
/** /**
* 替换规则固定电话;比如01086551122脱敏之后为0108*****22 * 替换规则固定电话;比如01086551122 脱敏之后为 0108*****22
*/ */
String replacer() default "*"; String replacer() default "*";

View File

@ -33,7 +33,7 @@ public @interface IdCardDesensitize {
int suffixKeep() default 2; int suffixKeep() default 2;
/** /**
* 替换规则身份证号码;比如530321199204074611脱敏之后为530321**********11 * 替换规则身份证号码;比如530321199204074611 脱敏之后为 530321**********11
*/ */
String replacer() default "*"; String replacer() default "*";

View File

@ -33,7 +33,7 @@ public @interface MobileDesensitize {
int suffixKeep() default 4; int suffixKeep() default 4;
/** /**
* 替换规则手机号;比如13248765917脱敏之后为132****5917 * 替换规则手机号;比如13248765917 脱敏之后为 132****5917
*/ */
String replacer() default "*"; String replacer() default "*";

View File

@ -35,7 +35,7 @@ public @interface PasswordDesensitize {
/** /**
* 替换规则密码; * 替换规则密码;
* *
* 比如123456脱敏之后为****** * 比如123456 脱敏之后为 ******
*/ */
String replacer() default "*"; String replacer() default "*";

View File

@ -29,6 +29,7 @@ public @interface SliderDesensitize {
/** /**
* 替换规则会将前缀后缀保留后全部替换成 replacer * 替换规则会将前缀后缀保留后全部替换成 replacer
*
* 例如prefixKeep = 1; suffixKeep = 2; replacer = "*"; * 例如prefixKeep = 1; suffixKeep = 2; replacer = "*";
* 原始字符串 123456 * 原始字符串 123456
* 脱敏后 1***56 * 脱敏后 1***56

View File

@ -0,0 +1,78 @@
package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
import cn.iocoder.yudao.framework.desensitize.core.base.handler.DesensitizationHandler;
import java.lang.annotation.Annotation;
/**
* 滑动脱敏处理器抽象类已实现通用的方法
*
* @author gaibu
*/
public abstract class AbstractSliderDesensitizationHandler<T extends Annotation>
implements DesensitizationHandler<T> {
@Override
public String desensitize(String origin, T annotation) {
int prefixKeep = getPrefixKeep(annotation);
int suffixKeep = getSuffixKeep(annotation);
String replacer = getReplacer(annotation);
int length = origin.length();
// 情况一原始字符串长度小于等于保留长度则原始字符串全部替换
if (prefixKeep >= length || suffixKeep >= length) {
return buildReplacerByLength(replacer, length);
}
// 情况二原始字符串长度小于等于前后缀保留字符串长度则原始字符串全部替换
if ((prefixKeep + suffixKeep) >= length) {
return buildReplacerByLength(replacer, length);
}
// 情况三原始字符串长度大于前后缀保留字符串长度则替换中间字符串
int interval = length - prefixKeep - suffixKeep;
return origin.substring(0, prefixKeep) +
buildReplacerByLength(replacer, interval) +
origin.substring(prefixKeep + interval);
}
/**
* 根据长度循环构建替换符
*
* @param replacer 替换符
* @param length 长度
* @return 构建后的替换符
*/
private String buildReplacerByLength(String replacer, int length) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < length; i++) {
builder.append(replacer);
}
return builder.toString();
}
/**
* 前缀保留长度
*
* @param annotation 注解信息
* @return 前缀保留长度
*/
abstract Integer getPrefixKeep(T annotation);
/**
* 后缀保留长度
*
* @param annotation 注解信息
* @return 后缀保留长度
*/
abstract Integer getSuffixKeep(T annotation);
/**
* 替换符
*
* @param annotation 注解信息
* @return 替换符
*/
abstract String getReplacer(T annotation);
}

View File

@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.BankCardDes
* *
* @author gaibu * @author gaibu
*/ */
public class BankCardDesensitization extends AbstractDesensitizationHandler<BankCardDesensitize> { public class BankCardDesensitization extends AbstractSliderDesensitizationHandler<BankCardDesensitize> {
@Override @Override
Integer getPrefixKeep(BankCardDesensitize annotation) { Integer getPrefixKeep(BankCardDesensitize annotation) {

View File

@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.CarLicenseD
* *
* @author gaibu * @author gaibu
*/ */
public class CarLicenseDesensitization extends AbstractDesensitizationHandler<CarLicenseDesensitize> { public class CarLicenseDesensitization extends AbstractSliderDesensitizationHandler<CarLicenseDesensitize> {
@Override @Override
Integer getPrefixKeep(CarLicenseDesensitize annotation) { Integer getPrefixKeep(CarLicenseDesensitize annotation) {
return annotation.prefixKeep(); return annotation.prefixKeep();

View File

@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.ChineseName
* *
* @author gaibu * @author gaibu
*/ */
public class ChineseNameDesensitization extends AbstractDesensitizationHandler<ChineseNameDesensitize> { public class ChineseNameDesensitization extends AbstractSliderDesensitizationHandler<ChineseNameDesensitize> {
@Override @Override
Integer getPrefixKeep(ChineseNameDesensitize annotation) { Integer getPrefixKeep(ChineseNameDesensitize annotation) {

View File

@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.SliderDesen
* *
* @author gaibu * @author gaibu
*/ */
public class DefaultDesensitizationHandler extends AbstractDesensitizationHandler<SliderDesensitize> { public class DefaultDesensitizationHandler extends AbstractSliderDesensitizationHandler<SliderDesensitize> {
@Override @Override
Integer getPrefixKeep(SliderDesensitize annotation) { Integer getPrefixKeep(SliderDesensitize annotation) {
return annotation.prefixKeep(); return annotation.prefixKeep();

View File

@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.FixedPhoneD
* *
* @author gaibu * @author gaibu
*/ */
public class FixedPhoneDesensitization extends AbstractDesensitizationHandler<FixedPhoneDesensitize> { public class FixedPhoneDesensitization extends AbstractSliderDesensitizationHandler<FixedPhoneDesensitize> {
@Override @Override
Integer getPrefixKeep(FixedPhoneDesensitize annotation) { Integer getPrefixKeep(FixedPhoneDesensitize annotation) {
return annotation.prefixKeep(); return annotation.prefixKeep();

View File

@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.IdCardDesen
* *
* @author gaibu * @author gaibu
*/ */
public class IdCardDesensitization extends AbstractDesensitizationHandler<IdCardDesensitize> { public class IdCardDesensitization extends AbstractSliderDesensitizationHandler<IdCardDesensitize> {
@Override @Override
Integer getPrefixKeep(IdCardDesensitize annotation) { Integer getPrefixKeep(IdCardDesensitize annotation) {
return annotation.prefixKeep(); return annotation.prefixKeep();

View File

@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.MobileDesen
* *
* @author gaibu * @author gaibu
*/ */
public class MobileDesensitization extends AbstractDesensitizationHandler<MobileDesensitize> { public class MobileDesensitization extends AbstractSliderDesensitizationHandler<MobileDesensitize> {
@Override @Override
Integer getPrefixKeep(MobileDesensitize annotation) { Integer getPrefixKeep(MobileDesensitize annotation) {

View File

@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.PasswordDes
* *
* @author gaibu * @author gaibu
*/ */
public class PasswordDesensitization extends AbstractDesensitizationHandler<PasswordDesensitize> { public class PasswordDesensitization extends AbstractSliderDesensitizationHandler<PasswordDesensitize> {
@Override @Override
Integer getPrefixKeep(PasswordDesensitize annotation) { Integer getPrefixKeep(PasswordDesensitize annotation) {
return annotation.prefixKeep(); return annotation.prefixKeep();