数据脱敏工具advance-tool-datamask
1 简介
对于什么是数据脱敏,以下解释来自百度百科
数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。
在大数据环境下隐私保护的需求越来越频繁的被提及,对于一些敏感的信息,市面上很多应用都有一些脱敏的处理。例如百度的个人中心对账号的脱敏:
实现思路:在数据转json字符串的过程中,使用自定义序列化工具,解析Java Bean上标注为敏感信息的属性,将其按照规则进行脱敏,最终返回给前端的就是脱敏后的数据。
2 引入依赖
<dependency><groupId>com.github.f-sunrise-qgroupId><artifactId>advance-tool-datamaskartifactId><version>1.0.1-RELEASEversion>
dependency>
3 前后端数据脱敏
3.1 使用注解定义带敏感信息的响应实体
使用注解@SensitiveInfo来自己标注哪些属性是敏感的,默认是全部隐藏,可设置mode来选择隐藏中间部分,MaskModeEnum.MID表示隐藏中间1/3。
@Data
public class SensitiveResponseDto {@SensitiveInfo(mode = MaskModeEnum.MID)private String userName;@SensitiveInfoprivate String password;@SensitiveInfo(mode = MaskModeEnum.MID)private String phone;
}
定义测试接口
@GetMapping("/test")
public SensitiveResponseDto test(){SensitiveResponseDto responseDto = new SensitiveResponseDto();responseDto.setUserName("admin");responseDto.setPassword("123456");responseDto.setPhone("12345678910");return responseDto;
}
调用测试接口的结果:

3.2 自定义handler
当默认的全部脱敏和中间1/3脱敏不能满足要求时,支持自定义脱敏规则。例如定义对IP地址隐藏中间两个数字的规则:
public class CustomDataMaskHandler implements IDataMaskHandler {/*** 自定义规则:如果data为IP,则隐藏中间两个数字** @param data* @return*/public String mask(String data) {if(ObjectUtils.isNotEmpty(data) && DataMaskConstant.IP_PATTERN.matcher(data).find()){String[] numbers = data.split("\\.");return numbers[0] +".*.*." + numbers[3];}return data;}
}
SensitiveResponseDto中增加clientIp,并设置handler为CustomDataMaskHandler.class
@Data
public class SensitiveResponseDto {@SensitiveInfo(mode = MaskModeEnum.MID)private String userName;@SensitiveInfoprivate String password;@SensitiveInfo(mode = MaskModeEnum.MID)private String phone;@SensitiveInfo(handler = CustomDataMaskHandler.class)private String clientIp;
}
修改测试接口
@GetMapping("/test")
public SensitiveResponseDto test(){SensitiveResponseDto responseDto = new SensitiveResponseDto();responseDto.setUserName("admin");responseDto.setPassword("123456");responseDto.setPhone("12345678910");responseDto.setClientIp("127.0.0.1");return responseDto;
}
再次调用测试接口
3.3 关闭脱敏功能
在application.properties中增加配置advance.tool.datamask.close=true
再次调用测试接口,数据正常返回。
4 日志脱敏
若是希望打印日志对敏感数据也脱敏,也可使用这个工具。logback.xml中增加配置
<conversionRule conversionWord="msg" converterClass="com.advance.sunrise.tool.datamask.log.SensitiveInfoConverter"> conversionRule>

测试接口中打印日志:
源码地址:https://github.com/f-sunrise-q/baseCore/tree/master/advance-parent/advance-tools
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
