本文地址:https://blog.csdn.net/qq_4088...
在咱们写代码的时候,会书写许多日志代码,然而有些敏感数据是须要进行平安脱敏解决的。
对于日志脱敏的形式有很多,常见的有①应用conversionRule
标签,继承MessageConverter
②书写一个脱敏工具类,在打印日志的时候对特定特字段进行脱敏返回。
两种形式各有优缺点:
- 第一种形式须要批改代码,不合乎开闭准则。
- 第二种形式,须要在日志办法的参数进行脱敏,对原生日志有入侵行为。
自定义脱敏组件(slf4j+logback)
一个我的项目在书写了很多打印日志的代码,然而前面有了脱敏需要,如果咱们去手动改变代码,会破费大量工夫。如果引入本组件,实现配置即可轻松实现脱敏。(仅需三步可轻松配置)
一、自定义脱敏组件 - 脱敏成果演示
二、自定义脱敏组件 - 应用形式
1、引入Jar包依赖
前提是你将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
替换示例:
<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文件下
三、自定义脱敏组件 - 脱敏标准
1、反对数据类型
八大根本类型及其包装类型、Map、List、业务里的Pojo对象、List<业务里的Pojo对象>、JSON字符串。
注:在配置文件中配置的时候,只须要配置对象里的属性值就行。
2、不反对的数据类型
List<八大根本类型及包装类型>,因为不晓得脱敏的数据源具体是哪一个。
3、匹配规定
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等以及业务对象中的字段、Map中的Key、JSON中的Keyvalue
:须要脱敏的值,如上诉的123456789@qq.com
、15310763497
。
4、日志标准
倡议书写日志的时候尽量标准,对于key为中文的是没有方法脱敏的,标准水平能够见脱敏成果演示里的代码。
四、logback-desensitize.yml配置阐明
# 日志脱敏log-desensitize: # 是否疏忽大小写匹配,默认为true ignore: true # 是否开启脱敏,默认为false open: true # pattern下的key/value为固定脱敏规定 pattern: # 邮箱 - @前第4-7位脱敏 email: "@>(4,7)" # qq邮箱 - @后1-3位脱敏 qqemail: "@<(1,3)" # 姓名 - 姓脱敏,如*杰伦 name: 1,1 # 明码 - 所有须要齐全脱敏的都能够应用内置的password password: password patterns: # 身份证号,key前面的字段都能够匹配以下规定(用逗号分隔) - key: identity,idcard # 定义规定的标识 custom: # defaultRegex示意应用组件内置的规定:identity示意身份证号 - 内置的18/15位 - defaultRegex: identity position: 9,13 # 内置的other示意如果其余规定都无奈匹配到,则按该规定解决 - defaultRegex: other position: 9,10 # 电话号码,key前面的字段都能够匹配以下规定(用逗号分隔) - key: phone,cellphone,mobile custom: # 手机号 - 内置的11位手机匹配规定 - defaultRegex: phone position: 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: other position: 1,3 # 这种形式不太举荐 - 一旦匹配不上,就不会脱敏 - key: localMobile custom: customRegex: "^0[0-9]{2,3}-[0-9]{7,8}" position: 1,3
Spring Boot 根底就不介绍了,举荐看这个收费教程:
https://github.com/javastacks/spring-boot-best-practice
下面这个配置是绝对残缺的,肯定要严格遵守层级配置格局。
自定义脱敏反对的形式
1、key:value的形式
- phone:4,7,示意phone属性的4-7位进行脱敏
- 原始数据:
13610357861
- 脱敏后:
136****7861
2、以符号作为起始、完结节点作为脱敏标记
emai:"@>(4,7)"
,@
为脱敏标记,>
示意其为完结节点,<
示意其为开始节点。即@>
示意对@
之前的进行脱敏,@<
示意对@
之后的进行脱敏。这个示例就是@
前的数据的第4-7位进行脱敏。
留神:这种规定里的双引号、括号不能省略,其次:
和=
不能作为标记符号,因为和匹配规定有抵触
- 原始数据:
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:正则表达式,如果合乎该表达式,则应用其对应的脱敏规定(position)
4、一个字段,依据多种值含意进行自定义脱敏
比如说,username字段的值能够是手机号、也能够是邮箱,这个值动静扭转的,后面几种形式都没方法解决,能够应用该形式。
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 # 都匹配不到时,依照这种规定来 - defaultRegex: other position : 1,3
留神:下面示例中匹配规定里的 双引号和括号 都不能省略
该组件内置四种匹配规定:手机号、身份证号、邮箱、other(其余匹配不到时用的),内置一种脱敏形式:password,示意齐全脱敏,可用于pattren下的。
注:当pattern和patterns下的key有反复的时候,只会应用pattern下指定的形式进行脱敏。
Jar包地址和源码地址
https://github.com/liuchengyi...
Github地址:
https://github.com/liuchengyi...
Jar包打入Maven本地仓库的形式
1、下载Jar包,放在一个文件夹里
2、在这个文件夹里关上cmd(关上cmd,进入到这个文件夹)
3、执行命令(前提保障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>
近期热文举荐:
1.1,000+ 道 Java面试题及答案整顿(2022最新版)
2.劲爆!Java 协程要来了。。。
3.Spring Boot 2.x 教程,太全了!
4.别再写满屏的爆爆爆炸类了,试试装璜器模式,这才是优雅的形式!!
5.《Java开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞+转发哦!