Java编写日志手机号脱敏工具类
背景
在开发过程中,很容易将用户敏感信息,例如手机号码、身份证等,打印在日志平台。为了保护用户数据,又不影响日志的打印,需要将日志中的敏感信息进行脱敏。

效果

没看明白,强烈建议 pull项目,执行一下项目中SensitiveUtils#main方法。
特性
- 支持多层级【Json】/【对象】字段脱敏
- 支持一次多字段脱敏
- 支持除【连续数组层次(下面会举例)】脱敏
- 不侵入业务代码(例如使用注解进行脱敏)
使用
输入为字符串/对象及单Json路径
// 传入对象
User user = new User();
user.setName("xiaoming");
user.setPhone("13455556666");
String strResult4 = SensitiveUtils.desMobilePhone(user, "phone");
System.out.println(strResult4); // {"phone":"134****6666","name":"xiaoming"}
// 传入json字符串
String str1 = "{\"name\":\"xiaoming\",\"phone\":\"13455556666\"}";
String strResult5 = SensitiveUtils.desMobilePhone(str1, "phone");
System.out.println(strResult5); // {"phone":"134****6666","name":"xiaoming"}
输入为字符串/对象及多Json路径

上图中,如果要脱敏全部手机号,路径则为 :phone , parent#phone
String str8 = "[{\"name\":\"xiaoliu\",\"phone\":\"13522222222\",\"parent\":[{\"name\":\"oldliu\",\"phone\":\"13533333333\"}]},{\"name\":\"xiaowang\",\"phone\":\"13500000000\",\"parent\":[{\"name\":\"oldwang\",\"phone\":\"13511111111\"},{\"name\":\"oldzhang\",\"phone\":\"13555555555\"}]}]";
String strResult8 = SensitiveUtils.desMobilePhone(str8, new HashSet<>(Arrays.asList("phone", "parent#phone")));
System.out.println(strResult8); // [{"parent":[{"phone":"135****3333","name":"oldliu"}],"phone":"135****2222","name":"xiaoliu"},{"parent":[{"phone":"135****1111","name":"oldwang"},{"phone":"135****5555","name":"oldzhang"}],"phone":"135****0000","name":"xiaowang"}]

上图中,如果要脱敏全部手机号,路径则为 :phone , parent#phone
String str9 = "{\"name\":\"xiaowang\",\"phone\":\"13500000000\",\"parent\":{\"name\":\"oldwang\",\"phone\":\"13511111111\"}}";
String strResult9 = SensitiveUtils.desMobilePhone(str9, new HashSet<>(Arrays.asList("phone", "parent#phone")));
System.out.println(strResult9);
已知缺陷
暂不支持连续俩层数组结构的JSON字符串/对象

暂不支持对String以外类型脱敏
暂不支持字符串中【对象JSON字符串】脱敏
{
"info": "{\"data\":\"{\\\"phone\\\":\\\"13444444444\\\"}\"}"
}
未来优化方向
- 增加更多脱敏类型(如身份证号码)
- 支持一个对象/Json字符串多种脱敏类型,例如:一个字符串同时脱敏手机号、身份证号
- 连续数组脱敏(待定)
- 支持非String类型字段脱敏(待定)
- 字符串中【对象JSON字符串】脱敏(待定)
到此这篇关于Java编写日志手机号脱敏工具类的文章就介绍到这了,更多相关Java手机号脱敏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java利用MYSQL LOAD DATA LOCAL INFILE实现大批量导入数据到MySQL
Mysql load data的使用,MySQL的LOAD DATAINFILE语句用于高速地从一个文本文件中读取行,并装入一个表中2018-03-03
Spring多租户数据源管理 AbstractRoutingDataSource
本文技术了Spring多租户数据源管理 AbstractRoutingDataSource,下文详细内容介绍,需要的小伙伴可以参考一下2022-05-05
SpringRunner和SpringJUnit4ClassRunner的区别及说明
这篇文章主要介绍了SpringRunner和SpringJUnit4ClassRunner的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-04-04
如何利用Retrofit+RxJava实现网络请求的异常处理
这篇文章主要介绍了如何利用Retrofit+RxJava实现网络请求的异常处理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-04-04
SpringBoot整合通用mapper实现泛型BaseController增删改方式
本文介绍了如何在SpringBoot项目中整合通用Mapper实现泛型BaseController的增删改功能,通过统一的代码实现减少重复,提高开发效率2025-11-11
springboot时间格式化的五种方法总结(解决后端传给前端的时间显示不一致)
这篇文章主要给大家介绍了关于springboot时间格式化的五种方法,文中介绍的方法解决了后端传给前端的时间显示不一致,文中通过图文以及代码介绍的非常详细,需要的朋友可以参考下2024-01-01
spring boot 项目利用Jenkins实现自动化部署的教程详解
这篇文章主要介绍了spring boot 项目利用Jenkins实现自动化部署的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2018-07-07


最新评论