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】/【對(duì)象】字段脫敏
- 支持一次多字段脫敏
- 支持除【連續(xù)數(shù)組層次(下面會(huì)舉例)】脫敏
- 不侵入業(yè)務(wù)代碼(例如使用注解進(jìn)行脫敏)
使用
輸入為字符串/對(duì)象及單Json路徑
// 傳入對(duì)象 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"}
輸入為字符串/對(duì)象及多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字符串/對(duì)象
暫不支持對(duì)String以外類型脫敏
暫不支持字符串中【對(duì)象JSON字符串】脫敏
{ "info": "{\"data\":\"{\\\"phone\\\":\\\"13444444444\\\"}\"}" }
未來優(yōu)化方向
- 增加更多脫敏類型(如身份證號(hào)碼)
- 支持一個(gè)對(duì)象/Json字符串多種脫敏類型,例如:一個(gè)字符串同時(shí)脫敏手機(jī)號(hào)、身份證號(hào)
- 連續(xù)數(shù)組脫敏(待定)
- 支持非String類型字段脫敏(待定)
- 字符串中【對(duì)象JSON字符串】脫敏(待定)
到此這篇關(guān)于Java編寫日志手機(jī)號(hào)脫敏工具類的文章就介紹到這了,更多相關(guān)Java手機(jī)號(hào)脫敏內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Java中方法重寫與重載的區(qū)別(面試高頻問點(diǎn))
這篇文章主要介紹了Java中方法重寫與重載的區(qū)別(面試高頻問點(diǎn)),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Spring?Boot用戶注冊(cè)驗(yàn)證的實(shí)現(xiàn)全過程記錄
最近在設(shè)計(jì)自己的博客系統(tǒng),涉及到用戶注冊(cè)與登錄驗(yàn)證,所以下面這篇文章主要給大家介紹了關(guān)于Spring?Boot用戶注冊(cè)驗(yàn)證的實(shí)現(xiàn)全過程,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01SpringBoot自定義注解之實(shí)現(xiàn)AOP切面日志詳解
這篇文章主要為大家詳細(xì)介紹了SpringBoot自定義注解之實(shí)現(xiàn)AOP切面統(tǒng)一打印出入?yún)⑷罩?,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09Java設(shè)計(jì)模式中橋接模式應(yīng)用詳解
橋接,顧名思義,就是用來連接兩個(gè)部分,使得兩個(gè)部分可以互相通訊。橋接模式將系統(tǒng)的抽象部分與實(shí)現(xiàn)部分分離解耦,使他們可以獨(dú)立的變化。本文通過示例詳細(xì)介紹了橋接模式的原理與使用,需要的可以參考一下2022-11-11Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(19)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07MyBatis實(shí)現(xiàn)物理分頁的實(shí)例
這篇文章主要介紹了MyBatis實(shí)現(xiàn)物理分頁的實(shí)例,MyBatis使用RowBounds實(shí)現(xiàn)的分頁是邏輯分頁,有興趣的可以了解一下。2017-01-01