亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java的logback自定義日志脫敏組件詳解

 更新時間:2023年11月06日 09:34:47   作者:LOOPY_Y  
這篇文章主要介紹了Java的logback自定義日志脫敏組件詳解,一個項目在書寫了很多打印日志的代碼,但是后面有了脫敏需求,如果我們去手動改動代碼,會花費大量時間,如果引入本組件,完成配置即可輕松完成脫敏,需要的朋友可以參考下

前言

在我們寫代碼的時候,會書寫許多日志代碼,但是有些敏感數據是需要進行安全脫敏處理的。

對于日志脫敏的方式有很多,常見的有: ①使用conversionRule標簽,繼承MessageConverter ②書寫一個脫敏工具類,在打印日志的時候對特定特字段進行脫敏返回。

兩種方式各有優(yōu)缺點:第一種方式需要修改代碼,不符合開閉原則。第二種方式,需要在日志方法的參數進行脫敏,對原生日志有入侵行為。

一個項目在書寫了很多打印日志的代碼,但是后面有了脫敏需求,如果我們去手動改動代碼,會花費大量時間。如果引入本組件,完成配置即可輕松完成脫敏。(僅需三步可輕松配置。

脫敏效果演示

在這里插入圖片描述

在這里插入圖片描述

使用方式

1、引入Jar包依賴

前提是你將Jar包打入本地倉庫,Jar包地址見后文。

<dependency>
    <groupId>pers.liuchengyin</groupId>
    <artifactId>logback-desensitization</artifactId>
    <version>1.0.0</version>
</dependency>

2、替換日志文件配置類(logback.xml)

日志打印方式都只需要替換成脫敏的類即可,如果你的業(yè)務不需要,則無需替換。

①ConsoleAppender - 控制臺脫敏

// 原類
ch.qos.logback.core.ConsoleAppender
// 替換類
pers.liuchengyin.logbackadvice.LcyConsoleAppender

②RollingFileAppender - 滾動文件

// 原類
ch.qos.logback.core.rolling.RollingFileAppender
// 替換類
pers.liuchengyin.logbackadvice.LcyRollingFileAppender

③FileAppender - 文件

// 原類
ch.qos.logback.core.rolling.RollingFileAppender
// 替換類
pers.liuchengyin.logbackadvice.LcyRollingFileAppender

替換示例:

<property name="CONSOLE_LOG_PATTERN"
          value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/>

<!-- ConsoleAppender 控制臺輸出日志 -->
<appender name="CONSOLE" class="pers.liuchengyin.logbackadvice.LcyConsoleAppender">
    <encoder>
        <pattern>
            ${CONSOLE_LOG_PATTERN}
        </pattern>
    </encoder>
</appender>

3、添加脫敏配置文件(logback-desensitize.yml)

該配置文件應該放在resources文件下

在這里插入圖片描述

脫敏規(guī)范

1、支持數據類型

八大基本類型及其包裝類型、Map、List、業(yè)務里的Pojo對象、List<業(yè)務里的Pojo對象>、JSON字符串。

注:在配置文件中配置的時候,只需要配置對象里的屬性值就行。

2、不支持的數據類型

List<八大基本類型及包裝類型>,因為不知道脫敏的數據源具體是哪一個。

3、匹配規(guī)則

key + 分割符 + value,目前僅支持冒號(:)和等號(=),示例如下:

log.info("your email:{}, your phone:{}", "123456789@qq.com","15310763497");
log.info("your email={}, your cellphone={}", "123456789@qq.com","15310763497");

key:定義了對應需要脫敏的關鍵字,如上訴的email、phone等以及業(yè)務對象中的字段、Map中的Key、JSON中的Keyvalue:需要脫敏的值,如上訴的123456789@qq.com、15310763497。

4、日志規(guī)范

建議書寫日志的時候盡量規(guī)范,對于key為中文的是沒有辦法脫敏的,規(guī)范程度可以見脫敏效果演示里的代碼。

logback-desensitize.yml配置說明

# 日志脫敏
log-desensitize:
  # 是否忽略大小寫匹配,默認為true
  ignore: true
  # 是否開啟脫敏,默認為false
  open: true
  # pattern下的key/value為固定脫敏規(guī)則
  pattern:
    # 郵箱 - @前第4-7位脫敏
    email: "@>(4,7)"
    # qq郵箱 - @后1-3位脫敏
    qqemail: "@<(1,3)"
    # 姓名 - 姓脫敏,如*杰倫
    name: 1,1
    # 密碼 - 所有需要完全脫敏的都可以使用內置的password
    password: password
  patterns:
    # 身份證號,key后面的字段都可以匹配以下規(guī)則(用逗號分隔)
    - key: identity,idcard
      # 定義規(guī)則的標識
      custom:
        # defaultRegex表示使用組件內置的規(guī)則:identity表示身份證號 - 內置的18/15位
        - defaultRegex: identity
          position: 9,13
        # 內置的other表示如果其他規(guī)則都無法匹配到,則按該規(guī)則處理
        - defaultRegex: other
          position: 9,10
    # 電話號碼,key后面的字段都可以匹配以下規(guī)則(用逗號分隔)
    - key: phone,cellphone,mobile
      custom:
        # 手機號 - 內置的11位手機匹配規(guī)則
        - defaultRegex: phone
          position: 4,7
        # 自定義正則匹配表達式:座機號(帶區(qū)號,號碼七位|八位)
        - customRegex: "^0[0-9]{2,3}-[0-9]{7,8}"
        # -后面的1-4位脫敏
          position: "-<(1,4)"
        # 自定義正則匹配表達式:座機號(不帶區(qū)號)
        - customRegex: "^[0-9]{7,8}"
          position: 3,5
        # 內置的other表示如果其他規(guī)則都無法匹配到,則按該規(guī)則處理
        - defaultRegex: other
          position: 1,3
    # 這種方式不太推薦 - 一旦匹配不上,就不會脫敏
    - key: localMobile
      custom:
          customRegex: "^0[0-9]{2,3}-[0-9]{7,8}"
          position: 1,3

上面這個配置是相對完整的,一定要嚴格遵守層級配置格式。

自定義脫敏支持的方式

1、key:value的方式

  • phone:4,7,表示phone屬性的4-7位進行脫敏
  • 原始數據:13610357861
  • 脫敏后:136****7861

2、以符號作為起始、結束節(jié)點作為脫敏標志

  • emai:“@>(4,7)”,@為脫敏標志,>表示其為結束節(jié)點,<表示其為開始節(jié)點。即@>表示對@之前的進行脫敏,@<表示對@之后的進行脫敏。這個示例就是@前的數據的第4-7位進行脫敏。

注意:這種規(guī)則里的雙引號、括號不能省略,其次:和=不能作為標志符號,因為和匹配規(guī)則有沖突

  • 原始數據:123456789@qq.com
  • "@>(4,7)"脫敏后:123****89@qq.com
  • "@<(1,3)"脫敏后:123456789@***com

3、自定義正則脫敏

patterns:
  # 手機號
  - key: phone,mobile
    custom:
      # 手機號的正則
      - customRegex: "^1[0-9]{10}"
        # 脫敏范圍
        position: 4,7

customRegex:正則表達式,如果符合該表達式,則使用其對應的脫敏規(guī)則(position)

4、一個字段,根據多種值含義進行自定義脫敏

比如說,username字段的值可以是手機號、也可以是郵箱,這個值動態(tài)改變的,前面幾種方式都沒辦法解決,可以使用該方式。

patterns:
  - key: username
    custom:
      # 手機號 - 11位
      - defaultRegex: phone
        position : 4,7
      # 郵箱 - @
   - defaultRegex: email
     position : "@>(3,12)"
   # 身份證 - 15/18位
   - defaultRegex: identity
     position : 1,3
   # 自定義正則
   - customRegex: "^1[0-9]{10}"
     position : 1,3
   # 都匹配不到時,按照這種規(guī)則來
   - defaultRegex: other
     position : 1,3

注意:上面示例中匹配規(guī)則里的 雙引號和括號 都不能省略

該組件內置四種匹配規(guī)則:手機號、身份證號、郵箱、other(其他匹配不到時用的),內置一種脫敏方式:password,表示完全脫敏,可用于pattren下的。

注:當pattern和patterns下的key有重復的時候,只會使用pattern下指定的方式進行脫敏。

Jar包打入Maven本地倉庫的方式

1、下載Jar包,放在一個文件夾里

2、在這個文件夾里打開cmd(打開cmd,進入到這個文件夾)

3、執(zhí)行命令(前提保證maven配置正常,使用mvn -v命令查看是否正常,如果顯示版本號表示正常)

mvn install:install-file -DgroupId=pers.liuchengyin -DartifactId=logback-desensitization -Dversion=1.0.0 -Dpackaging=jar -Dfile=logback-desensitization-1.0.0.jar

命令說明:

-DgroupId
 表示jar對應的groupId  
 <groupId>pers.liuchengyin</groupId>
-DartifactId:
 表示jar對應的artifactId
 <artifactId>logback-desensitization</artifactId>
-Dversion
 表示jar對應的 version
 <version>1.0.0</version>

到此這篇關于Java的logback自定義日志脫敏組件詳解的文章就介紹到這了,更多相關logback自定義日志脫敏組件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java實現一個簡單的線程池代碼示例

    Java實現一個簡單的線程池代碼示例

    線程池是管理線程的一個池子,通過阻塞隊列管理任務,主要參數包括corePoolSize、maximumPoolSize、keepAliveTime等,這篇文章主要介紹了Java實現一個簡單的線程池的相關資料,需要的朋友可以參考下
    2024-09-09
  • 聊聊單線程的Redis為何會快到飛起

    聊聊單線程的Redis為何會快到飛起

    Redis想必大家都或多或少聽過吧,我們在工作學習中通常用它來作為緩存使用,既然是作為緩存,大家的第一反應肯定是:這家伙很快
    2022-02-02
  • Java深入講解二十三種設計模式之中的策略模式

    Java深入講解二十三種設計模式之中的策略模式

    策略模式屬于Java 23種設計模式中行為模式之一,該模式定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法的變化不會影響使用算法的客戶。本文將通過示例詳細講解這一模式,需要的可以參考一下
    2022-05-05
  • Kotlin教程之函數和包的定義和流程控制

    Kotlin教程之函數和包的定義和流程控制

    這篇文章主要介紹了Kotlin教程之函數和包的定義和流程控制的相關資料,需要的朋友可以參考下
    2017-05-05
  • 基于Java編寫一個神奇的代碼恢復工具

    基于Java編寫一個神奇的代碼恢復工具

    這篇文章主要為大家詳細介紹了如何基于Java編寫一個神奇的代碼恢復工具,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-04-04
  • 詳解spring切面使用傳遞給被通知方法的參數

    詳解spring切面使用傳遞給被通知方法的參數

    本篇文章主要介紹了詳解spring切面使用傳遞給被通知方法的參數,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 詳解Java利用ExecutorService實現同步執(zhí)行大量線程

    詳解Java利用ExecutorService實現同步執(zhí)行大量線程

    這篇文章主要介紹了Java利用ExecutorService實現同步執(zhí)行大量線程,ExecutorService可以維護我們的大量線程在操作臨界資源時的穩(wěn)定性。
    2017-03-03
  • Java單例模式下的MongoDB數據庫操作工具類

    Java單例模式下的MongoDB數據庫操作工具類

    這篇文章主要介紹了Java單例模式下的MongoDB數據庫操作工具類,結合實例形式分析了java基于單例模式下操作MongoDB數據庫相關連接、查詢、插入、刪除等操作封裝技巧,需要的朋友可以參考下
    2018-01-01
  • Java包裝類的概述與應用

    Java包裝類的概述與應用

    包裝類使用起來非常方便,但是沒有對應的方法來操作這些基本數據類型,可以使用一個類,把基本類型的數據裝起來,在類中定義一些方法,我們可以使用類中的方法來操作這些基本類型的數據,這篇文章主要給大家介紹了關于Java包裝類的相關資料,需要的朋友可以參考下
    2022-04-04
  • 全面分析Java方法的使用與遞歸

    全面分析Java方法的使用與遞歸

    在java中,方法就是用來完成解決某件事情或實現某個功能的辦法;程序調用自身的編程技巧稱為遞歸( recursion)。遞歸做為一種算法在程序設計語言中廣泛應用。但是如果沒終止條件會造成死循環(huán),所以遞歸代碼里要有結束自調自的條件,本篇接下來講解一下方法與遞歸
    2022-04-04

最新評論