电竞比分网-中国电竞赛事及体育赛事平台

分享

SpringBoot 日志脫敏,開源組件太強(qiáng)了

 昵稱10087950 2022-07-18 發(fā)布于江蘇

大家好,我是磊哥。

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

①使用conversionRule標(biāo)簽,繼承MessageConverter

②書寫一個(gè)脫敏工具類,在打印日志的時(shí)候?qū)μ囟ㄌ刈侄芜M(jìn)行脫敏返回。


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


第一種方式需要修改代碼,不符合開閉原則。

第二種方式,需要在日志方法的參數(shù)進(jìn)行脫敏,對原生日志有入侵行為。

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

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

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

Image

注 意
 文末有:7701頁互聯(lián)網(wǎng)大廠面試題 


Image

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

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 - 控制臺(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文件下
Image

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

1、支持?jǐn)?shù)據(jù)類型

八大基本類型及其包裝類型、Map、List、業(yè)務(wù)里的Pojo對象、List<業(yè)務(wù)里的Pojo對象>、JSON字符串。
注:在配置文件中配置的時(shí)候,只需要配置對象里的屬性值就行。

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

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

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:定義了對應(yīng)需要脫敏的關(guān)鍵字,如上訴的email、phone等以及業(yè)務(wù)對象中的字段、Map中的Key、JSON中的Key
value:需要脫敏的值,如上訴的123456789@qq.com、15310763497。

4、日志規(guī)范

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

四、logback-desensitize.yml配置說明

# 日志脫敏
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:
    身份證號,key后面的字段都可以匹配以下規(guī)則(用逗號分隔)
    - key: identity,idcard
      定義規(guī)則的標(biāo)識(shí)
      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:
        手機(jī)號 - 內(nèi)置的11位手機(jī)匹配規(guī)則
        - defaultRegex: phone
          position: 4,7
        自定義正則匹配表達(dá)式:座機(jī)號(帶區(qū)號,號碼七位|八位)
        - customRegex: '^0[0-9]{2,3}-[0-9]{7,8}'
        -后面的1-4位脫敏
          position: '-<(1,4)'
        自定義正則匹配表達(dá)式:座機(jī)號(不帶區(qū)號)
        - customRegex: '^[0-9]{7,8}'
          position: 3,5
        內(nèi)置的other表示如果其他規(guī)則都無法匹配到,則按該規(guī)則處理
        - defaultRegex: other
          position: 1,3
    這種方式不太推薦 - 一旦匹配不上,就不會(huì)脫敏
    - key: localMobile
      custom:
          customRegex: '^0[0-9]{2,3}-[0-9]{7,8}'
          position: 1,3

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

自定義脫敏支持的方式

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

2、以符號作為起始、結(jié)束節(jié)點(diǎn)作為脫敏標(biāo)志
emai:'@>(4,7)',@為脫敏標(biāo)志,>表示其為結(jié)束節(jié)點(diǎn),<表示其為開始節(jié)點(diǎn)。即@>表示對@之前的進(jìn)行脫敏,@<表示對@之后的進(jìn)行脫敏。這個(gè)示例就是@前的數(shù)據(jù)的第4-7位進(jìn)行脫敏。注意:這種規(guī)則里的雙引號、括號不能省略,其次:和=不能作為標(biāo)志符號,因?yàn)楹推ヅ湟?guī)則有沖突
原始數(shù)據(jù):123456789@qq.com
'@>(4,7)'脫敏后:123****89@qq.com
'@<(1,3)'脫敏后:123456789@***com

3、自定義正則脫敏

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

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

4、一個(gè)字段,根據(jù)多種值含義進(jìn)行自定義脫敏
比如說,username字段的值可以是手機(jī)號、也可以是郵箱,這個(gè)值動(dòng)態(tài)改變的,前面幾種方式都沒辦法解決,可以使用該方式。

patterns:
  - key: username
    custom:
      手機(jī)號 - 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ī)則來
   - defaultRegex: other
     position : 1,3

注意:上面示例中匹配規(guī)則里的 雙引號和括號 都不能省略
該組件內(nèi)置四種匹配規(guī)則:手機(jī)號、身份證號、郵箱、other(其他匹配不到時(shí)用的),內(nèi)置一種脫敏方式:password,表示完全脫敏,可用于pattren下的。

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

Jar包地址和源碼地址

Jar包Github地址 - logback-desensitization-1.0.0.jar

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

Github地址:Logback和slf4j的日志脫敏組件Demo

https://github.com/liuchengyin01/LogbackDesensitization

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

1、 下載Jar包,放在一個(gè)文件夾里;
2、 在這個(gè)文件夾里打開cmd(打開cmd,進(jìn)入到這個(gè)文件夾);
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>

來源:https://blog.csdn.net/qq_40885085

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多