1. 支持自动化配置;
  2. 支持深度脱敏,支持复杂对象,嵌套对象,对象内多层级嵌套,自动寻找返回值中嵌套对象包含的需脱敏的属性;

主要配置

sensitive:enable: truedepth: falsepackages: com.mos.secure

说明:

属性

默认值

取值范围

说明

enable

true

true/false

是否启用脱敏,全局生效,默认开启

depth

false

true/false

是否启用深度脱敏,为了性能考虑,默认关闭

packages


字符串

包路径,多个以英文逗号分隔

深度脱敏规则:

depth为true,且packages不为空,当方法返回值嵌套的属性包含在packages下,则自动进行脱敏。

示例

代码略长,大致如下:方法返回Page,Page中的Records为List,List中存放实体类SensitiveEntity,SensitiveEntity又包含List<SensitiveSubEntity> SubEntities,SensitiveSubEntity中又包含了SensitiveGrandSonEntity,基本可以满足我们大多数场景。

@Desensitizationpublic Page page() {Page page = new Page();page.setCurrent(1);page.setSize(10);List<SensitiveEntity> list = new ArrayList<SensitiveEntity>();for (int i = 0; i < 5; i++) {SensitiveEntity sensitiveEntity = createEntity("1" + i, "樱木花道" + i, "15699996666" + i, "10101020000101000" + i);list.add(sensitiveEntity);}page.setRecords(list);return page;}private static SensitiveEntity createEntity(String i, String i1, String i2, String i3) {SensitiveEntity sensitiveEntity = new SensitiveEntity();sensitiveEntity.setId(i);sensitiveEntity.setName(i1);sensitiveEntity.setMobile(i2);sensitiveEntity.setIdCard(i3);List<SensitiveSubEntity> subEntities = new ArrayList<SensitiveSubEntity>();for (int j=0;j<3;j++){SensitiveSubEntity sensitiveSubEntity = new SensitiveSubEntity();sensitiveSubEntity.setAddress("addr--->"+j);SensitiveGrandSonEntity grandSonEntity = new SensitiveGrandSonEntity();grandSonEntity.setEmail("grq100296@163.com");sensitiveSubEntity.setSensitiveGrandSonEntity(grandSonEntity);subEntities.add(sensitiveSubEntity);}sensitiveEntity.setSubEntities(subEntities);return sensitiveEntity;}

SensitiveEntity

@Datapublic class SensitiveEntity {private String id;@DesensitizationProp(value = SensitiveTypeEnum.CUSTOM,preLength = 1,sufLength = 5)private String name;@DesensitizationProp(SensitiveTypeEnum.MOBILE_PHONE)private String mobile;@DesensitizationProp(SensitiveTypeEnum.ID_CARD)private String idCard;private List<SensitiveSubEntity> subEntities;}

SensitiveSubEntity

@Datapublic class SensitiveSubEntity {@DesensitizationProp(SensitiveTypeEnum.ADDRESS)private String address;private SensitiveGrandSonEntity sensitiveGrandSonEntity;}

SensitiveGrandSonEntity

@Datapublic class SensitiveGrandSonEntity {@DesensitizationProp(value = SensitiveTypeEnum.EMAIL)private String email;}