成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

優雅!Spring Boot處理日志中的敏感數據

開發 前端
本篇文章,我將詳細介紹如何使用 Logback 隱藏日志中的敏感數據。雖然這種方法是日志文件的最后一道防線,但它并不是解決問題的最終方案。敏感數據是指任何需要防止未經授權訪問的信息。這可能包括任何個人身份信息,如社會安全號碼、銀行信息、登錄憑據、地址、電子郵件等。

環境:Spring Boot3.2.5

1. 簡介

在當前的數據保護時代,我們必須高度重視個人敏感數據的處理與記錄。鑒于數據量龐大,我們在記錄這些信息時,必須格外小心,采取適當措施來屏蔽或保護用戶的敏感信息,以保障他們的隱私權不受侵犯。

本篇文章,我將詳細介紹如何使用 Logback 隱藏日志中的敏感數據。雖然這種方法是日志文件的最后一道防線,但它并不是解決問題的最終方案。敏感數據是指任何需要防止未經授權訪問的信息。這可能包括任何個人身份信息,如社會安全號碼、銀行信息、登錄憑據、地址、電子郵件等。

Logback 是 Java 社區使用最廣泛的日志框架之一。它取代了其前身 Log4j。Logback 的實現速度更快,配置選項更多,而且在歸檔舊日志文件方面更具靈活性。

接下來,我們將在登錄應用程序日志時屏蔽屬于用戶的敏感數據。

2. 實戰案例

2.1 環境準備

準備實體對象

public class User {
  private Long id ;
  private String name ;
  private String address ;
  private String phone ;
  private String password ;
  private String email ;
  // getters, setters
}

我們后續將對上面的name,phone,password,email進行脫敏處理。

接口定義

@GetMapping("/login")
public User login() throws Exception {
  // TODO
  User user = new User(1L, "張三", "新疆", "1399999999", "123456789", "xxxooo@qq.com") ;
  logger.info("用戶信息: {}", new ObjectMapper().writeValueAsString(user)) ;
  return user ;
}

在正常情況下訪問上面的接口日志輸出如下:

圖片圖片

接下來,我們將要處理這里的敏感字段。

2.2 自定義PatternLayout

PatternLayout類可以通過模式字符串配置的靈活布局。這個類的目標是格式化一個ILoggingEvent并以{#link String}的形式返回結果。結果的格式取決于轉換模式。

public class MaskingPatternLayout extends PatternLayout {


  private Pattern multilinePattern;
  private List<String> maskPatterns = new ArrayList<>();


  public void addMaskPattern(String maskPattern) {
    maskPatterns.add(maskPattern);
    multilinePattern = Pattern.compile(maskPatterns.stream().collect(Collectors.joining("|")), Pattern.MULTILINE);
  }


  @Override
  public String doLayout(ILoggingEvent event) {
    return maskMessage(super.doLayout(event));
  }


  private String maskMessage(String content) {
    if (multilinePattern == null) {
      return content;
    }
    StringBuilder sb = new StringBuilder(content);
    Matcher matcher = multilinePattern.matcher(sb);
    while (matcher.find()) {
      IntStream.rangeClosed(1, matcher.groupCount()).forEach(group -> {
        if (matcher.group(group) != null) {
          IntStream.range(matcher.start(group), matcher.end(group)).forEach(i -> sb.setCharAt(i, '*'));
        }
      });
    }
    return sb.toString();
  }
}

PatternLayout.doLayout()的實現負責在應用程序的每條日志信息中屏蔽匹配的數據,前提是這些數據與配置的模式之一相匹配。

接下來就可以在logback-spring.xml中配置;logback.xml 中的 maskPatterns 列表可構建多行模式。如果它以屬性列表的形式出現,那么每個配置項都會調用 addMaskPattern。

2.3 配置Appender

<appender name="mask" class="ch.qos.logback.core.ConsoleAppender">
  <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
    <layout class="com.pack.sensitive.log.MaskingPatternLayout">
      <maskPattern>\"name\"\s*:\s*\"(.*?)\"</maskPattern>
      <maskPattern>\"phone\"\s*:\s*\"(.*?)\"</maskPattern>
      <maskPattern>\"password\"\s*:\s*\"(.*?)\"</maskPattern>
      <maskPattern>([\w.-]+@[\w.-]+\.\w+)</maskPattern>
      <pattern>%d{22:mm:ss} %-5level %logger Line:%-3L - %msg%n</pattern>
      <charset>UTF-8</charset>
    </layout>
  </encoder>
</appender>

這里我添加了4個模式用來匹配上面提到的4個字段。有個該配置后再次進行訪問上面的接口

圖片圖片

控制臺日志輸出

圖片

正確的將我們需要處理的字段進行了脫敏。

如果我們是直接打印的對象呢?

User user = new User(1L, "張三", "新疆", "1399999999", "123456789", "xxxooo@qq.com") ;
logger.info("用戶信息: {}", new ObjectMapper().writeValueAsString(user)) ;
logger.info("直接打印對象: {}", user) ;

日志輸出

圖片圖片

對于這種情況,我們還需要定義更多的模式,如下:

<maskPattern>name\s*=\s*(.*?),</maskPattern>
<maskPattern>password\s*=\s*(.*?),</maskPattern>

再次訪問接口

圖片

正確的脫敏了此種情況。

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2024-01-01 14:19:11

2023-06-06 08:51:06

2024-03-05 09:40:35

2024-08-08 10:32:11

2025-04-28 08:08:14

2010-09-25 08:55:29

2025-06-18 02:12:00

2023-10-23 10:39:05

2023-10-30 15:35:05

數據安全數據驅動

2021-08-27 16:26:11

敏感數據

2025-02-07 09:11:04

JSON對象策略

2020-10-25 09:04:46

數據加密數據泄露攻擊

2021-05-19 09:58:16

云服務云存儲云計算

2023-10-07 08:34:27

項目API接口

2023-06-27 07:26:36

汽車之家敏感數據治理

2024-01-01 15:53:25

2010-10-09 12:15:12

安全管理

2021-09-16 10:11:15

Dataphin 數據保護

2020-04-16 08:00:00

Ansible Vau敏感數據加密

2023-09-13 08:56:51

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩成人免费av | 欧美国产一区二区 | 成人av一区 | 日韩伦理一区二区 | 久久久精彩视频 | 乳色吐息在线观看 | 精品美女久久久 | 久久久久久综合 | 亚洲精品一区中文字幕乱码 | 81精品国产乱码久久久久久 | 91在线观 | 亚洲黄色一区二区三区 | 成人一区二区视频 | 久久久国产精品入口麻豆 | 日韩最新网址 | 日韩精品一区二区三区中文在线 | 国产成人免费 | 日本在线视频不卡 | 91亚洲精品在线观看 | 日韩欧美在线视频播放 | 日韩日韩日韩日韩日韩日韩日韩 | 亚洲精品大片 | 成人性生交大片免费看中文带字幕 | 成人久久久久久久久 | 久久久精品日本 | 一区二区三区国产 | 国产视频精品在线观看 | 黄视频在线网站 | 天天干夜夜操 | 91麻豆产精品久久久久久 | 国产一区二区三区视频 | 欧美精品片 | 亚洲精品一区在线观看 | 伊人超碰 | 日本中文字幕一区 | 99色视频| 国产美女特级嫩嫩嫩bbb片 | 日韩中文字幕 | 美女亚洲一区 | 九九热在线观看视频 | 成人在线观看欧美 |