前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot脱敏控件升级,支持深度脱敏

springboot脱敏控件升级,支持深度脱敏

作者头像
小尘哥
发布2022-12-07 10:41:34
9890
发布2022-12-07 10:41:34
举报
文章被收录于专栏:小尘哥的专栏

secure-ext-spring-boot-starter自发布以来受到广大童鞋的关注,也收到各位同行朋友好的建议与需求,主要是常规情况下我们可能根据各自项目需求,列表页会返回Page对象,Page中包含records(List类型),records又包含实际的Entity,因此大多数情况下返回的会是复杂对象。因此经过几天的优化调整,重新发布升级版,本次主要升级内容:

1. 支持自动化配置;

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

最新版本

最新发布版已更新到mave中央仓库:[Maven Central][1.0.3-release]

主要配置

代码语言:javascript
复制
sensitive:
   enable: true
   depth: false
   packages: com.mos.secure

说明:

属性

默认值

取值范围

说明

enable

true

true/false

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

depth

false

true/false

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

packages

字符串

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

深度脱敏规则:

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

示例

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

代码语言:javascript
复制
    public List<SensitiveEntity> listData() {
        System.out.println("执行业务处理...");
        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);
        }
        return list;
    }

    @Desensitization
    public Page page() {
        Page page = new Page();
        page.setCurrent(1);
        page.setSize(10);
        page.setRecords(listData());
        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

代码语言:javascript
复制
@Data
public 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

代码语言:javascript
复制
@Data
public class SensitiveSubEntity {

    @DesensitizationProp(SensitiveTypeEnum.ADDRESS)
    private String address;

    private SensitiveGrandSonEntity sensitiveGrandSonEntity;
}

SensitiveGrandSonEntity

代码语言:javascript
复制
@Data
public class SensitiveGrandSonEntity {

    @DesensitizationProp(value = SensitiveTypeEnum.EMAIL)
    private String email;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陌与尘埃 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最新版本
  • 主要配置
  • 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档