import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Desensitize {
/**
* 脱敏类型
*/
DesensitizeType type() default DesensitizeType.DEFAULT;
/**
* 脱敏规则,例如:手机号码脱敏规则为:前3位明文,后4位明文,中间用*代替
*/
String rule() default "";
/**
* 脱敏占位符,例如:用*代替敏感数据
*/
String placeholder() default "*";
/**
* 脱敏开始位置,从0开始计数,默认为0
*/
int start() default 0;
/**
* 脱敏结束位置,默认为整个字符串长度
*/
int end() default Integer.MAX_VALUE;
}
该注解包含了以下属性: - type
:脱敏类型,枚举类型,包括默认脱敏、姓名脱敏、手机号码脱敏、身份证号码脱敏等; - rule
:脱敏规则,例如:手机号码脱敏规则为:前3位明文,后4位明文,中间用*代替; - placeholder
:脱敏占位符,例如:用*代替敏感数据; - start
:脱敏开始位置,从0开始计数,默认为0; - end
:脱敏结束位置,默认为整个字符串长度。
您可以根据具体的需求,对以上属性进行修改和扩展。在使用该注解时,只需要在需要脱敏的字段上添加该注解即可。例如:
public class User {
@Desensitize(type = DesensitizeType.MOBILE_PHONE, rule = "3,4,*")
private String mobilePhone;
@Desensitize(type = DesensitizeType.NAME)
private String name;
// 其他字段省略
}
在上面的示例中, User
类中的 mobilePhone
和 name
字段都使用了 @Desensitize
注解进行了脱敏处理。其中, mobilePhone
字段使用了手机号码脱敏类型,并指定了脱敏规则为前3位明文,后4位明文,中间用*代替; name
字段使用了默认脱敏类型,对姓名进行脱敏处理。