<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 的日志脫敏

          共 8633字,需瀏覽 18分鐘

           ·

          2022-07-17 16:11

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

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

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

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

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

          一個(gè)項(xiàng)目在書寫了很多打印日志的代碼,但是后面有了脫敏需求,如果我們?nèi)ナ謩?dòng)改動(dòng)代碼,會(huì)花費(fèi)大量時(shí)間。如果引入本組件,完成配置即可輕松完成脫敏。(僅需三步可輕松配置)

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



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

          1、引入Jar包依賴

          前提是你將Jar包打入本地倉(cāng)庫(kù),Jar包地址見后文。

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

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

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

          ①ConsoleAppender - 控制臺(tái)脫敏
          // 原類
          ch.qos.logback.core.ConsoleAppender
          // 替換類
          pers.liuchengyin.logbackadvice.LcyConsoleAppender
          ②RollingFileAppender - 滾動(dòng)文件
          // 原類
          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 控制臺(tái)輸出日志 -->
          <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、支持?jǐn)?shù)據(jù)類型

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

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

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

          List<八大基本類型及包裝類型>,因?yàn)椴恢烂撁舻臄?shù)據(jù)源具體是哪一個(gè)。

          3、匹配規(guī)則

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

          log.info("your email:{}, your phone:{}""[email protected]","15310763497");
          log.info("your email={}, your cellphone={}""[email protected]","15310763497");
          • key:定義了對(duì)應(yīng)需要脫敏的關(guān)鍵字,如上訴的email、phone等以及業(yè)務(wù)對(duì)象中的字段、Map中的Key、JSON中的Key
          • value:需要脫敏的值,如上訴的[email protected]、15310763497。

          4、日志規(guī)范

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

          四、logback-desensitize.yml配置說(shuō)明

          # 日志脫敏
          log-desensitize:
            # 是否忽略大小寫匹配,默認(rèn)為true
            ignore: true
            # 是否開啟脫敏,默認(rèn)為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:
              # 身份證號(hào),key后面的字段都可以匹配以下規(guī)則(用逗號(hào)分隔)
              - key: identity,idcard
                # 定義規(guī)則的標(biāo)識(shí)
                custom:
                  # defaultRegex表示使用組件內(nèi)置的規(guī)則:identity表示身份證號(hào) - 內(nèi)置的18/15位
                  - defaultRegex: identity
                    position: 9,13
                  # 內(nèi)置的other表示如果其他規(guī)則都無(wú)法匹配到,則按該規(guī)則處理
                  - defaultRegex: other
                    position: 9,10
              # 電話號(hào)碼,key后面的字段都可以匹配以下規(guī)則(用逗號(hào)分隔)
              - key: phone,cellphone,mobile
                custom:
                  # 手機(jī)號(hào) - 內(nèi)置的11位手機(jī)匹配規(guī)則
                  - defaultRegex: phone
                    position: 4,7
                  # 自定義正則匹配表達(dá)式:座機(jī)號(hào)(帶區(qū)號(hào),號(hào)碼七位|八位)
                  - customRegex: "^0[0-9]{2,3}-[0-9]{7,8}"
                  # -后面的1-4位脫敏
                    position: "-<(1,4)"
                  # 自定義正則匹配表達(dá)式:座機(jī)號(hào)(不帶區(qū)號(hào))
                  - customRegex: "^[0-9]{7,8}"
                    position: 3,5
                  # 內(nèi)置的other表示如果其他規(guī)則都無(wú)法匹配到,則按該規(guī)則處理
                  - defaultRegex: other
                    position: 1,3
              # 這種方式不太推薦 - 一旦匹配不上,就不會(huì)脫敏
              - key: localMobile
                custom:
                    customRegex: "^0[0-9]{2,3}-[0-9]{7,8}"
                    position: 1,3

          上面這個(gè)配置是相對(duì)完整的,一定要嚴(yán)格遵守層級(jí)配置格式。

          自定義脫敏支持的方式

          1、key:value的方式

          • phone:4,7,表示phone屬性的4-7位進(jìn)行脫敏
          • 原始數(shù)據(jù):13610357861
          • 脫敏后:136****7861

          2、以符號(hào)作為起始、結(jié)束節(jié)點(diǎn)作為脫敏標(biāo)志

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

          注意:這種規(guī)則里的雙引號(hào)、括號(hào)不能省略,其次:=不能作為標(biāo)志符號(hào),因?yàn)楹推ヅ湟?guī)則有沖突

          3、自定義正則脫敏

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

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

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

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

          patterns:
            - key: username
              custom:
                # 手機(jī)號(hào) - 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
             # 都匹配不到時(shí),按照這種規(guī)則來(lái)
             - defaultRegex: other
               position : 1,3

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

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

          注:當(dāng)pattern和patterns下的key有重復(fù)的時(shí)候,只會(huì)使用pattern下指定的方式進(jìn)行脫敏。

          Jar包地址和源碼地址

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

          Github地址:

          https://github.com/liuchengyin01/LogbackDesensitization

          Jar包打入Maven本地倉(cāng)庫(kù)的方式

          1、下載Jar包,放在一個(gè)文件夾里

          2、在這個(gè)文件夾里打開cmd(打開cmd,進(jìn)入到這個(gè)文件夾)

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

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

          命令說(shuō)明:

          -DgroupId
           表示jar對(duì)應(yīng)的groupId  
           <groupId>pers.liuchengyin</groupId>
          -DartifactId:
           表示jar對(duì)應(yīng)的artifactId
           <artifactId>logback-desensitization</artifactId>
          -Dversion
           表示jar對(duì)應(yīng)的 version
           <version>1.0.0</version>

          來(lái)源:https://blog.csdn.net/qq_40885085

          我們創(chuàng)建了一個(gè)高質(zhì)量的技術(shù)交流群,與優(yōu)秀的人在一起,自己也會(huì)優(yōu)秀起來(lái),趕緊點(diǎn)擊加群,享受一起成長(zhǎng)的快樂。另外,如果你最近想跳槽的話,年前我花了2周時(shí)間收集了一波大廠面經(jīng),節(jié)后準(zhǔn)備跳槽的可以點(diǎn)擊這里領(lǐng)取!

          推薦閱讀

          ··································

          你好,我是程序猿DD,10年開發(fā)老司機(jī)、阿里云MVP、騰訊云TVP、出過(guò)書創(chuàng)過(guò)業(yè)、國(guó)企4年互聯(lián)網(wǎng)6年從普通開發(fā)到架構(gòu)師、再到合伙人。一路過(guò)來(lái),給我最深的感受就是一定要不斷學(xué)習(xí)并關(guān)注前沿。只要你能堅(jiān)持下來(lái),多思考、少抱怨、勤動(dòng)手,就很容易實(shí)現(xiàn)彎道超車!所以,不要問我現(xiàn)在干什么是否來(lái)得及。如果你看好一個(gè)事情,一定是堅(jiān)持了才能看到希望,而不是看到希望才去堅(jiān)持。相信我,只要堅(jiān)持下來(lái),你一定比現(xiàn)在更好!如果你還沒什么方向,可以先關(guān)注我,這里會(huì)經(jīng)常分享一些前沿資訊,幫你積累彎道超車的資本。

          點(diǎn)擊領(lǐng)取2022最新10000T學(xué)習(xí)資料
          瀏覽 70
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  久久久99精品视频 | 天天摸人人 | 日韩无码一二三 | 国产激情久久久久久 | 豆花无码成人免费视频 |