Class SensitiveDataMasker

java.lang.Object
io.leandev.appfuse.http.logging.SensitiveDataMasker

public class SensitiveDataMasker extends Object

敏感資訊遮罩工具

自動遮罩日誌中的敏感資訊,包括:

  • 認證資訊:Authorization, Cookie, API Key
  • 密碼欄位:password, secret, token
  • 個人資料:信用卡號、身分證字號(可自訂規則)

遮罩規則

  • 完全遮罩:將整個值替換為 MASKED
  • 部分遮罩:保留前後少數字元,中間遮罩(適用於長字串)
  • 正則遮罩:符合特定格式的資料自動遮罩

使用範例

SensitiveDataMasker masker = new SensitiveDataMasker();

// 遮罩標頭
Map<String, String> headers = masker.maskHeaders(originalHeaders);
// Authorization: Bearer token123 → Authorization: Bearer ***MASKED***

// 遮罩 JSON Body
String json = "{\"password\":\"secret123\",\"username\":\"admin\"}";
String masked = masker.maskJson(json);
// {"password":"***MASKED***","username":"admin"}

// 自訂敏感欄位
masker.addSensitiveField("apiKey");
masker.addSensitivePattern(Pattern.compile("\\d{16}")); // 信用卡號
  • Constructor Details

    • SensitiveDataMasker

      public SensitiveDataMasker()
      建立預設的敏感資訊遮罩工具
  • Method Details

    • addSensitiveHeader

      public void addSensitiveHeader(String headerName)
      新增自訂的敏感標頭
      Parameters:
      headerName - 標頭名稱(不分大小寫)
    • addSensitiveField

      public void addSensitiveField(String fieldName)
      新增自訂的敏感欄位
      Parameters:
      fieldName - 欄位名稱(不分大小寫)
    • addSensitivePattern

      public void addSensitivePattern(Pattern pattern)
      新增自訂的敏感資料正則表達式
      Parameters:
      pattern - 正則表達式
    • maskHeaders

      public Map<String,String> maskHeaders(Map<String,String> headers)
      遮罩 HTTP 標頭
      Parameters:
      headers - 原始標頭
      Returns:
      遮罩後的標頭(新的 Map 實例)
    • maskJson

      public String maskJson(String json)
      遮罩 JSON 字串中的敏感欄位
      Parameters:
      json - 原始 JSON 字串
      Returns:
      遮罩後的 JSON 字串
    • maskText

      public String maskText(String text)
      遮罩任意文字中的敏感資訊
      Parameters:
      text - 原始文字
      Returns:
      遮罩後的文字
    • partialMask

      public String partialMask(String value, int keepPrefix, int keepSuffix)

      部分遮罩(保留前後少數字元)

      範例:

      partialMask("1234567890123456", 4, 4) → "1234********3456"
      partialMask("short", 4, 4) → "***MASKED***"
      
      Parameters:
      value - 原始值
      keepPrefix - 保留的前綴字元數
      keepSuffix - 保留的後綴字元數
      Returns:
      遮罩後的字串