<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          3 步完成 Spring Boot 的日志脫敏

          共 8601字,需瀏覽 18分鐘

           ·

          2022-07-23 16:32

          往期熱門文章:

          1、線上MySQL的自增id用盡怎么辦?被面試官干趴下了!
          2、求求你別再用 System.currentTimeMillis() 統(tǒng)計代碼耗時了,真的太 Low 了!
          3、如何將 @Transactional 事務(wù)注解運用到爐火純青?
          4、不知道怎么解耦業(yè)務(wù)?Spring Event 了解一下!
          5、Java多線程+List分段完美解決導入等批量更新場景問題!

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

          對于日志脫敏的方式有很多,常見的有①使用conversionRule標簽,繼承MessageConverter②書寫一個脫敏工具類,在打印日志的時候?qū)μ囟ㄌ刈侄芜M行脫敏返回。

          兩種方式各有優(yōu)缺點:

          • 第一種方式需要修改代碼,不符合開閉原則。
          • 第二種方式,需要在日志方法的參數(shù)進行脫敏,對原生日志有入侵行為。

          自定義脫敏組件(slf4j+logback)

          一個項目在書寫了很多打印日志的代碼,但是后面有了脫敏需求,如果我們?nèi)ナ謩痈膭哟a,會花費大量時間。如果引入本組件,完成配置即可輕松完成脫敏。(僅需三步可輕松配置)

          一、自定義脫敏組件 - 脫敏效果演示



          二、自定義脫敏組件 - 使用方式

          1、引入Jar包依賴

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

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

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

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

          ①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.FileAppender
          // 替換類
          pers.liuchengyin.logbackadvice.LcyFileAppender

          替換示例:

          <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)

          該配置文件應(yīng)該放在resources文件下


          三、自定義脫敏組件 - 脫敏規(guī)范

          1、支持數(shù)據(jù)類型

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

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

          2、不支持的數(shù)據(jù)類型

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

          3、匹配規(guī)則

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

          log.info("your email:{}, your phone:{}""[email protected]","15310763497");
          log.info("your email={}, your cellphone={}""[email protected]","15310763497");
          • key:定義了對應(yīng)需要脫敏的關(guān)鍵字,如上訴的email、phone等以及業(yè)務(wù)對象中的字段、Map中的Key、JSON中的Key
          • value:需要脫敏的值,如上訴的[email protected]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
              # 密碼 - 所有需要完全脫敏的都可以使用內(nèi)置的password
              password: password
            patterns:
              # 身份證號,key后面的字段都可以匹配以下規(guī)則(用逗號分隔)
              - key: identity,idcard
                # 定義規(guī)則的標識
                custom:
                  # defaultRegex表示使用組件內(nèi)置的規(guī)則:identity表示身份證號 - 內(nèi)置的18/15位
                  - defaultRegex: identity
                    position: 9,13
                  # 內(nèi)置的other表示如果其他規(guī)則都無法匹配到,則按該規(guī)則處理
                  - defaultRegex: other
                    position: 9,10
              # 電話號碼,key后面的字段都可以匹配以下規(guī)則(用逗號分隔)
              - key: phone,cellphone,mobile
                custom:
                  # 手機號 - 內(nèi)置的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
                  # 內(nèi)置的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位進行脫敏
          • 原始數(shù)據(jù):13610357861
          • 脫敏后:136****7861

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

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

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

          3、自定義正則脫敏

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

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

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

          比如說,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ī)則里的 雙引號和括號 都不能省略

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

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

          Jar包地址和源碼地址

          https://github.com/liuchengyin01/LogbackDesensitization/tree/master/repo/pers/liuchengyin/logback-desensitization/1.0.0

          Github地址:

          https://github.com/liuchengyin01/LogbackDesensitization

          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對應(yīng)的groupId  
           <groupId>pers.liuchengyin</groupId>
          -DartifactId:
           表示jar對應(yīng)的artifactId
           <artifactId>logback-desensitization</artifactId>
          -Dversion
           表示jar對應(yīng)的 version
           <version>1.0.0</version>
          轉(zhuǎn)自:https://blog.csdn.net/qq_40885085
          往期熱門文章:

          1、線上MySQL的自增id用盡怎么辦?被面試官干趴下了!
          2、計算機專業(yè)會不會成為下一個土木?
          3、xxl-job驚艷的設(shè)計,怎能叫人不愛
          4、ArrayList#subList這四個坑,一不小心就中招
          5、面試官:大量請求 Redis 不存在的數(shù)據(jù),從而影響數(shù)據(jù)庫,該如何解決?
          6、MySQL 暴跌!
          7、超越 Xshell!號稱下一代 Terminal 終端神器,用完愛不釋手!
          8、IDEA 官宣全新默認 UI,太震撼了??!
          9、讓你直呼「臥槽」的 GitHub 項目!
          10、Kafka又笨又重,為啥不選Redis?

          瀏覽 80
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www.日逼 | 国产色欲一区二区精品 | 久久婷婷秘 精品日产538 | 网址成人视频国产偷拍 | 香蕉伊人久久在线 |