Java日誌手機號脫敏工具類

帅气的涛啊發表於2024-11-30

背景

在開發過程中,很容易將使用者敏感資訊,例如手機號碼、身份證等,列印在日誌平臺。為了保護使用者資料,又不影響日誌的列印,需要將日誌中的敏感資訊進行脫敏。

效果

沒看明白,強烈建議 pull專案,執行一下專案中SensitiveUtils#main方法。

特性

  1. 支援多層級【Json】/【物件】欄位脫敏
  2. 支援一次多欄位脫敏
  3. 支援除【連續陣列層次(下面會舉例)】脫敏
  4. 不侵入業務程式碼(例如使用註解進行脫敏)

使用

  1. 輸入為字串/物件及單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"}
    

  2. 輸入為字串/物件及多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);
    

已知缺陷

  1. 暫不支援連續倆層陣列結構的JSON字串/物件

  2. 暫不支援對String以外型別脫敏

  3. 暫不支援字串中【物件JSON字串】脫敏

    {
        "info": "{\"data\":\"{\\\"phone\\\":\\\"13444444444\\\"}\"}"
    }
    

未來最佳化方向

  1. 增加更多脫敏型別(如身份證號碼)
  2. 支援一個物件/Json字串多種脫敏型別,例如:一個字串同時脫敏手機號、身份證號
  3. 連續陣列脫敏(待定)
  4. 支援非String型別欄位脫敏(待定)
  5. 字串中【物件JSON字串】脫敏(待定)

Github地址

https://github.com/handsometaoa/SensitiveUtils

相關文章