开发喵星球

RuoYi-Vue-Plus 数据脱敏(330)

系统使用Jackson序列化策略 对标注了 @Sensitive 注解的属性进行脱敏处理

手机号脱敏

【手机号码】前三位,后4位,其他隐藏,比如151****8888

public class POJO {
    @Sensitive(strategy = SensitiveStrategy.PHONE)
    private String phone;
}

身份证脱敏

【身份证号】前3位 和后4位

public class POJO {
    @Sensitive(strategy = SensitiveStrategy.ID_CARD)
    private String idcard;
}

地址脱敏

【地址】只显示到地区,不显示详细地址,比如:陕西省西安市********

public class POJO {
    @Sensitive(strategy = SensitiveStrategy.ADDRESS)
    private String address;
}

邮箱脱敏

【电子邮箱】邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,比如:d**@gmail.com

public class POJO {
    @Sensitive(strategy = SensitiveStrategy.EMAIL)
    private String email;
}

银行卡脱敏

【银行卡号脱敏】脱敏规则根据卡号长度调整,所以只展示前4位,后面的位数根据卡号决定展示1-4位 例如:

“1234 2222 3333 4444 6789 9” -> “1234 **** **** **** **** 9”
“1234 2222 3333 4444 6789 91” -> “1234 **** **** **** **** 91”
“1234 2222 3333 4444 678” -> “1234 **** **** **** 678”
“1234 2222 3333 4444 6789” -> “1234 **** **** **** 6789”

public class POJO {
    @Sensitive(strategy = SensitiveStrategy.BANK_CARD)
    private String bankCard;
}

基于角色的脱敏控制

可根据角色用户决定是否进行脱敏。例如:

public class User {
    @Sensitive(strategy = SensitiveStrategy.BANK_CARD, roleKey = "common")
    private String bankCardNumber;
}

只要拥有common角色,就不进行脱敏处理

基于权限的脱敏控制

public class User {
    @Sensitive(strategy = SensitiveStrategy.BANK_CARD, perms = "system:user:query")
    private String bankCardNumber;
}

只要拥有system:user:query菜单权限,就不进行脱敏处理

自定义策略

在类 org/dromara/common/sensitive/core/SensitiveStrategy.java 下修改添加自定义策略。

忽略脱敏策略

使用 @SensitiveIgnore 注解标注在需要忽略属性的类或属性中

// 忽略整个类的脱敏
@SensitiveIgnore
public class User {
    private Sub subField;
}

// 忽略某个字段的脱敏
public class User {
    @SensitiveIgnore
    private Sub subField;
}

// 忽略某个方法的脱敏
public class User {
    private Sub subField;

    @SensitiveIgnore
    public Sub getSubField() {
        return this.subField;
    }
}

1

   
分类:Java/OOP 作者:无限繁荣, 吴蓉 发表于:2024-09-13 17:16:28 阅读量:155
<<   >>


powered by kaifamiao