其他
Spring Boot 三步完成日志脱敏
来源:blog.csdn.net/qq_40885085/article/details/113385261
conversionRule
标签,继承MessageConverter
②书写一个脱敏工具类,在打印日志的时候对特定特字段进行脱敏返回。第一种方式需要修改代码,不符合开闭原则。 第二种方式,需要在日志方法的参数进行脱敏,对原生日志有入侵行为。
自定义脱敏组件(slf4j+logback)
一、自定义脱敏组件 - 脱敏效果演示
二、自定义脱敏组件 - 使用方式
1、引入Jar包依赖
<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
替换示例:
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)
三、自定义脱敏组件 - 脱敏规范
1、支持数据类型
注:在配置文件中配置的时候,只需要配置对象里的属性值就行。
2、不支持的数据类型
3、匹配规则
log.info("your email={}, your cellphone={}", "123456789@qq.com","15310763497");
key
:定义了对应需要脱敏的关键字,如上诉的email、phone等以及业务对象中的字段、Map中的Key、JSON中的Keyvalue
:需要脱敏的值,如上诉的123456789@qq.com
、15310763497
。
4、日志规范
四、logback-desensitize.yml配置说明
> 基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
>
> * 项目地址:<https://github.com/YunaiV/yudao-cloud>
> * 视频教程:<https://doc.iocoder.cn/video/>
# 日志脱敏
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
自定义脱敏支持的方式
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、自定义正则脱敏
# 手机号
- key: phone,mobile
custom:
# 手机号的正则
- customRegex: "^1[0-9]{10}"
# 脱敏范围
position: 4,7
4、一个字段,根据多种值含义进行自定义脱敏
- 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
注意:上面示例中匹配规则里的 双引号和括号 都不能省略
https://github.com/liuchengyin01/LogbackDesensitization/tree/master/repo/pers/liuchengyin/logback-desensitization/1.0.0
https://github.com/liuchengyin01/LogbackDesensitization
Jar包打入Maven本地仓库的方式
mvn -v
命令查看是否正常,如果显示版本号表示正常)表示jar对应的groupId
<groupId>pers.liuchengyin</groupId>
-DartifactId:
表示jar对应的artifactId
<artifactId>logback-desensitization</artifactId>
-Dversion
表示jar对应的 version
<version>1.0.0</version>
END
往期精彩Spring Boot + Prometheus + Grafana 打造可视化监控一条龙
Spring Boot 版的低代码开发平台
Spring Boot 使用 Sa-Token-Quick-Login 插件实现快速登录认证
Spring Boot 接口数据加解密技巧,so easy!
关注后端面试那些事,回复【2022面经】
获取最新大厂Java面经