Java編寫日志手機(jī)號(hào)脫敏工具類
背景
在開發(fā)過程中,很容易將用戶敏感信息,例如手機(jī)號(hào)碼、身份證等,打印在日志平臺(tái)。為了保護(hù)用戶數(shù)據(jù),又不影響日志的打印,需要將日志中的敏感信息進(jìn)行脫敏。

效果

沒看明白,強(qiáng)烈建議 pull項(xiàng)目,執(zhí)行一下項(xiàng)目中SensitiveUtils#main方法。
特性
- 支持多層級(jí)【Json】/【對象】字段脫敏
- 支持一次多字段脫敏
- 支持除【連續(xù)數(shù)組層次(下面會(huì)舉例)】脫敏
- 不侵入業(yè)務(wù)代碼(例如使用注解進(jìn)行脫敏)
使用
輸入為字符串/對象及單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路徑

上圖中,如果要脫敏全部手機(jī)號(hào),路徑則為 :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"}]

上圖中,如果要脫敏全部手機(jī)號(hào),路徑則為 :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);
已知缺陷
暫不支持連續(xù)倆層數(shù)組結(jié)構(gòu)的JSON字符串/對象

暫不支持對String以外類型脫敏
暫不支持字符串中【對象JSON字符串】脫敏
{
"info": "{\"data\":\"{\\\"phone\\\":\\\"13444444444\\\"}\"}"
}
未來優(yōu)化方向
- 增加更多脫敏類型(如身份證號(hào)碼)
- 支持一個(gè)對象/Json字符串多種脫敏類型,例如:一個(gè)字符串同時(shí)脫敏手機(jī)號(hào)、身份證號(hào)
- 連續(xù)數(shù)組脫敏(待定)
- 支持非String類型字段脫敏(待定)
- 字符串中【對象JSON字符串】脫敏(待定)
到此這篇關(guān)于Java編寫日志手機(jī)號(hào)脫敏工具類的文章就介紹到這了,更多相關(guān)Java手機(jī)號(hào)脫敏內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring事務(wù)Propagation及其實(shí)現(xiàn)原理詳解
這篇文章主要介紹了spring事務(wù)Propagation及其實(shí)現(xiàn)原理詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02
Java利用MYSQL LOAD DATA LOCAL INFILE實(shí)現(xiàn)大批量導(dǎo)入數(shù)據(jù)到MySQL
Mysql load data的使用,MySQL的LOAD DATAINFILE語句用于高速地從一個(gè)文本文件中讀取行,并裝入一個(gè)表中2018-03-03
???????Spring多租戶數(shù)據(jù)源管理 AbstractRoutingDataSource
本文技術(shù)了???????Spring多租戶數(shù)據(jù)源管理 AbstractRoutingDataSource,下文詳細(xì)內(nèi)容介紹,需要的小伙伴可以參考一下2022-05-05
SpringRunner和SpringJUnit4ClassRunner的區(qū)別及說明
這篇文章主要介紹了SpringRunner和SpringJUnit4ClassRunner的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
如何利用Retrofit+RxJava實(shí)現(xiàn)網(wǎng)絡(luò)請求的異常處理
這篇文章主要介紹了如何利用Retrofit+RxJava實(shí)現(xiàn)網(wǎng)絡(luò)請求的異常處理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-04-04
SpringBoot整合通用mapper實(shí)現(xiàn)泛型BaseController增刪改方式
本文介紹了如何在SpringBoot項(xiàng)目中整合通用Mapper實(shí)現(xiàn)泛型BaseController的增刪改功能,通過統(tǒng)一的代碼實(shí)現(xiàn)減少重復(fù),提高開發(fā)效率2025-11-11
springboot時(shí)間格式化的五種方法總結(jié)(解決后端傳給前端的時(shí)間顯示不一致)
這篇文章主要給大家介紹了關(guān)于springboot時(shí)間格式化的五種方法,文中介紹的方法解決了后端傳給前端的時(shí)間顯示不一致,文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01
spring boot 項(xiàng)目利用Jenkins實(shí)現(xiàn)自動(dòng)化部署的教程詳解
這篇文章主要介紹了spring boot 項(xiàng)目利用Jenkins實(shí)現(xiàn)自動(dòng)化部署的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07

