點擊上方「Java基基」,選擇「設為星標」
做積極的人,而不是積極廢人!
每天14:00更新文章,每天掉億點點頭髮...
源碼精品專欄
原創 | Java 2021超神之路,很肝~
中文詳細注釋的開源項目
RPC 框架 Dubbo 源碼解析
網絡應用框架 Netty 源碼解析
消息中間件 RocketMQ 源碼解析
數據庫中間件 Sharding-JDBC 和 MyCAT 源碼解析
作業調度中間件 Elastic-Job 源碼解析
分布式事務中間件 TCC-Transaction 源碼解析
Eureka 和 Hystrix 源碼解析
Java 並發源碼
來源:blog.csdn.net/qq_40885085/
article/details/113385261
在我們書寫代碼的時候,會書寫許多日誌代碼,但是有些敏感數據是需要進行安全脫敏處理的。
對於日誌脫敏的方式有很多,常見的有①使用conversionRule標籤,繼承MessageConverter②書寫一個脫敏工具類,在打印日誌的時候對特定特字段進行脫敏返回。
兩種方式各有優缺點:
基於 Spring Boot + MyBatis Plus + Vue & Element 實現的後台管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能
一個項目在書寫了很多打印日誌的代碼,但是後面有了脫敏需求,如果我們去手動改動代碼,會花費大量時間。如果引入本組件,完成配置即可輕鬆完成脫敏。(僅需三步可輕鬆配置)
一、自定義脫敏組件 - 脫敏效果演示

前提是你將Jar包打入本地倉庫,Jar包地址見後文。
<dependency><groupId>pers.liuchengyin</groupId><artifactId>logback-desensitization</artifactId><version>1.0.0</version></dependency>2、替換日誌文件配置類(logback.xml)日誌打印方式都只需要替換成脫敏的類即可,如果你的業務不需要,則無需替換。
①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替換示例:<propertyname="CONSOLE_LOG_PATTERN"value="%yellow(%date{yyyy-MM-ddHH:mm:ss})|%highlight(%-5level)|%blue(%thread)|%blue(%file:%line)|%green(%logger)|%cyan(%msg%n)"/><!--ConsoleAppender控制台輸出日誌--><appendername="CONSOLE"class="pers.liuchengyin.logbackadvice.LcyConsoleAppender"><encoder><pattern>${CONSOLE_LOG_PATTERN}</pattern></encoder></appender>3、添加脫敏配置文件(logback-desensitize.yml)該配置文件應該放在resources文件下

八大基本類型及其包裝類型、Map、List、業務里的Pojo對象、List<業務里的Pojo對象>、JSON字符串。
註:在配置文件中配置的時候,只需要配置對象里的屬性值就行。
2、不支持的數據類型List<八大基本類型及包裝類型>,因為不知道脫敏的數據源具體是哪一個。
3、匹配規則key + 分割符 + value,目前僅支持冒號(:)和等號(=),示例如下:
log.info("youremail:{},yourphone:{}","123456789@qq.com","15310763497");log.info("youremail={},yourcellphone={}","123456789@qq.com","15310763497");建議書寫日誌的時候儘量規範,對於key為中文的是沒有辦法脫敏的,規範程度可以見脫敏效果演示里的代碼。
四、logback-desensitize.yml配置說明>基於SpringCloudAlibaba+Gateway+Nacos+RocketMQ+Vue&Element實現的後台管理系統+用戶小程序,支持RBAC動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能>>*項目地址:<https://gitee.com/zhijiantianya/yudao-cloud>>*視頻教程:<https://doc.iocoder.cn/video/>#日誌脫敏log-desensitize:#是否忽略大小寫匹配,默認為trueignore:true#是否開啟脫敏,默認為falseopen:true#pattern下的key/value為固定脫敏規則pattern:#郵箱-@前第4-7位脫敏email:"@>(4,7)"#qq郵箱-@後1-3位脫敏qqemail:"@<(1,3)"#姓名-姓脫敏,如*杰倫name:1,1#密碼-所有需要完全脫敏的都可以使用內置的passwordpassword:passwordpatterns:#身份證號,key後面的字段都可以匹配以下規則(用逗號分隔)-key:identity,idcard#定義規則的標識custom:#defaultRegex表示使用組件內置的規則:identity表示身份證號-內置的18/15位-defaultRegex:identityposition:9,13#內置的other表示如果其他規則都無法匹配到,則按該規則處理-defaultRegex:otherposition:9,10#電話號碼,key後面的字段都可以匹配以下規則(用逗號分隔)-key:phone,cellphone,mobilecustom:#手機號-內置的11位手機匹配規則-defaultRegex:phoneposition:4,7#自定義正則匹配表達式:座機號(帶區號,號碼七位|八位)-customRegex:"^0[0-9]{2,3}-[0-9]{7,8}"#-後面的1-4位脫敏position:"-<(1,4)"#自定義正則匹配表達式:座機號(不帶區號)-customRegex:"^[0-9]{7,8}"position:3,5#內置的other表示如果其他規則都無法匹配到,則按該規則處理-defaultRegex:otherposition:1,3#這種方式不太推薦-一旦匹配不上,就不會脫敏-key:localMobilecustom:customRegex:"^0[0-9]{2,3}-[0-9]{7,8}"position:1,3上面這個配置是相對完整的,一定要嚴格遵守層級配置格式。
自定義脫敏支持的方式1、key:value的方式emai:"@>(4,7)",@為脫敏標誌,>表示其為結束節點,<表示其為開始節點。即@>表示對@之前的進行脫敏,@<表示對@之後的進行脫敏。這個示例就是@前的數據的第4-7位進行脫敏。
注意:這種規則里的雙引號、括號不能省略,其次:和=不能作為標誌符號,因為和匹配規則有衝突
customRegex:正則表達式,如果符合該表達式,則使用其對應的脫敏規則(position)
4、一個字段,根據多種值含義進行自定義脫敏比如說,username字段的值可以是手機號、也可以是郵箱,這個值動態改變的,前面幾種方式都沒辦法解決,可以使用該方式。
patterns:-key:usernamecustom:#手機號-11位-defaultRegex:phoneposition:4,7#郵箱-@-defaultRegex:emailposition:"@>(3,12)"#身份證-15/18位-defaultRegex:identityposition:1,3#自定義正則-customRegex:"^1[0-9]{10}"position:1,3#都匹配不到時,按照這種規則來-defaultRegex:otherposition:1,3注意:上面示例中匹配規則里的 雙引號和括號 都不能省略
該組件內置四種匹配規則:手機號、身份證號、郵箱、other(其他匹配不到時用的),內置一種脫敏方式: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、執行命令(前提保證maven配置正常,使用mvn -v命令查看是否正常,如果顯示版本號表示正常)
mvninstall: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>歡迎加入我的知識星球,一起探討架構,交流源碼。加入方式,長按下方二維碼噢:
已在知識星球更新源碼解析如下:
最近更新《芋道 SpringBoot 2.X 入門》系列,已經 101 余篇,覆蓋了MyBatis、Redis、MongoDB、ES、分庫分表、讀寫分離、SpringMVC、Webflux、權限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能測試等等內容。
提供近 3W 行代碼的 SpringBoot 示例,以及超 6W 行代碼的電商微服務項目。
獲取方式:點「在看」,關注公眾號並回復666領取,更多內容陸續奉上。
文章有幫助的話,在看,轉發吧。
謝謝支持喲 (*^__^*)