网易首页 > 网易号 > 正文 申请入驻

SpringBoot 日志脱敏,开源组件太强了!

0
分享至

在我们书写代码的时候,会书写许多日志代码,但是有些敏感数据是需要进行安全脱敏处理的。

对于日志脱敏的方式有很多,常见的有①使用conversionRule标签,继承MessageConverter②书写一个脱敏工具类,在打印日志的时候对特定特字段进行脱敏返回。

两种方式各有优缺点:

  • 第一种方式需要修改代码,不符合开闭原则。

  • 第二种方式,需要在日志方法的参数进行脱敏,对原生日志有入侵行为。

自定义脱敏组件(slf4j+logback)

一个项目在书写了很多打印日志的代码,但是后面有了脱敏需求,如果我们去手动改动代码,会花费大量时间。如果引入本组件,完成配置即可轻松完成脱敏。(仅需三步可轻松配置)

一、自定义脱敏组件 - 脱敏效果演示

1、引入Jar包依赖

前提是你将Jar包打入本地仓库,Jar包地址见后文。


pers.liuchengyin
logback-desensitization
1.0.0

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
替换示例:"CONSOLE_LOG_PATTERN"
value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/>

"CONSOLE">

${CONSOLE_LOG_PATTERN}

3、添加脱敏配置文件(logback-desensitize.yml)

该配置文件应该放在resources文件下

1、支持数据类型

八大基本类型及其包装类型、Map、List、业务里的Pojo对象、List<业务里的Pojo对象>、JSON字符串。面试宝典:https://www.yoodb.com 即将上线。

注:在配置文件中配置的时候,只需要配置对象里的属性值就行。
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中的Key

  • value:需要脱敏的值,如上诉的123456789@qq.com15310763497

4、日志规范

建议书写日志的时候尽量规范,对于key为中文的是没有办法脱敏的,规范程度可以见脱敏效果演示里的代码。

# 日志脱敏,公众 号Java精选
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、自定义正则脱敏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/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命令查看是否正常,如果显示版本号表示正常)

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
pers.liuchengyin
-DartifactId:
表示jar对应的artifactId
logback-desensitization
-Dversion
表示jar对应的 version
1.0.0

作者:九月清晨柳成荫 https://blog.csdn.net/qq_40885085/article/details/113385261

公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!

最近有很多人问,有没有读者交流群!加入方式很简单,公众号Java精选,回复“加群”,即可入群!

(微信小程序):3000+道面试题,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计等,在线随时刷题!

------ 特别推荐 ------

特别推荐:专注分享最前沿的技术与资讯,为弯道超车做好准备及各种开源项目与高效率软件的公众号,「大咖笔记」,专注挖掘好东西,非常值得大家关注。点击下方公众号卡片关注

文章有帮助的话,点在看,转发吧!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
50年石油美元协议到期 沙特:不再续约

50年石油美元协议到期 沙特:不再续约

南方都市报
2024-06-16 07:03:39
全球震呆!法国极右登台惊变,竟因不满穆斯林愚昧,誓要驱逐移民

全球震呆!法国极右登台惊变,竟因不满穆斯林愚昧,誓要驱逐移民

真实星球
2024-06-15 23:06:08
闹剧结束!网红樊小慧遭多人控诉,宣布退网,精神状态惹人担忧

闹剧结束!网红樊小慧遭多人控诉,宣布退网,精神状态惹人担忧

甜小娱儿
2024-06-14 16:07:49
事态升级!黄一鸣已找律师,高调放话法庭见,王思聪新动静曝光!

事态升级!黄一鸣已找律师,高调放话法庭见,王思聪新动静曝光!

古希腊掌管月桂的神
2024-06-13 19:54:17
媒体人:刚把一份18人的华裔归化名单交给足协的人

媒体人:刚把一份18人的华裔归化名单交给足协的人

懂球帝
2024-06-16 16:41:09
吴谨言横店剧组被偶遇,又瘦又矮法令纹明显,脸巴掌大还有点垮

吴谨言横店剧组被偶遇,又瘦又矮法令纹明显,脸巴掌大还有点垮

娱记掌门
2024-06-15 18:28:27
重磅!周琦放弃签字费+三年顶薪续约,主动降薪只为挑战辽宁王朝

重磅!周琦放弃签字费+三年顶薪续约,主动降薪只为挑战辽宁王朝

小鬼头体育
2024-06-16 11:46:15
6月13日俄乌最新:俄罗斯海军最强战队杀入美国后院

6月13日俄乌最新:俄罗斯海军最强战队杀入美国后院

西楼饮月
2024-06-13 15:12:33
越闹越大!官方紧急通告,涉事人员全部停职,司机被喷辣椒水不冤

越闹越大!官方紧急通告,涉事人员全部停职,司机被喷辣椒水不冤

乐阳聊军事
2024-06-15 18:34:44
王思聪21岁现任宣战!曝大量私照长腿吸睛颜值高,甜蜜躺女方腿上

王思聪21岁现任宣战!曝大量私照长腿吸睛颜值高,甜蜜躺女方腿上

八卦爱侃娱
2024-06-16 16:33:05
西方突然发现,美国对中国赶尽杀绝的关税政策,反而帮了中国大忙

西方突然发现,美国对中国赶尽杀绝的关税政策,反而帮了中国大忙

蓝色海边
2024-06-15 18:42:40
问界M9翻滚下山崖全景图曝光之后,网友们对山崖又有了新的认识

问界M9翻滚下山崖全景图曝光之后,网友们对山崖又有了新的认识

映射生活的身影
2024-06-13 18:26:51
谣言不攻自破,姜萍能否被浙大录取?专家泼了一盆冷水

谣言不攻自破,姜萍能否被浙大录取?专家泼了一盆冷水

平老师666
2024-06-15 12:51:39
俄专家:俄中双方在三年内启动大约3000个投资项目

俄专家:俄中双方在三年内启动大约3000个投资项目

俄罗斯卫星通讯社
2024-06-15 16:05:26
普京:如果乌克兰放弃加入北约,俄罗斯将立即停火

普京:如果乌克兰放弃加入北约,俄罗斯将立即停火

花非花008
2024-06-14 21:54:14
为什么现在没人关心油价了?

为什么现在没人关心油价了?

汽车扒壹扒
2024-06-14 22:07:30
朴素!王祖蓝现身香港,开五菱宏光迷你款,车高1米6,车价仅6万

朴素!王祖蓝现身香港,开五菱宏光迷你款,车高1米6,车价仅6万

柠檬有娱乐
2024-06-14 15:05:45
回顾浙江男子偷窥女士洗澡坠亡,家属索赔88.9万,法院判决赢赞许

回顾浙江男子偷窥女士洗澡坠亡,家属索赔88.9万,法院判决赢赞许

五月读书汇
2024-06-16 08:05:23
上海女子请人上门灭白蚁崩溃:几百元就能解决,对方竟收了9000元!网友:按只收费?

上海女子请人上门灭白蚁崩溃:几百元就能解决,对方竟收了9000元!网友:按只收费?

上海圈
2024-06-15 12:38:41
女儿高考完睡了3天3夜,家长不敢喊,醒来说一席话让父母破防

女儿高考完睡了3天3夜,家长不敢喊,醒来说一席话让父母破防

子芫伴你成长
2024-06-14 22:57:44
2024-06-16 17:20:49
Java精选
Java精选
一场永远也演不完的戏
1551文章数 3855关注度
往期回顾 全部

科技要闻

iPhone 16会杀死大模型APP吗?

头条要闻

G7峰会意总理向马克龙投去"死亡凝视" 视频在外网疯传

头条要闻

G7峰会意总理向马克龙投去"死亡凝视" 视频在外网疯传

体育要闻

没人永远年轻 但青春如此无敌还是离谱了些

娱乐要闻

上影节红毯:倪妮好松弛,娜扎吸睛

财经要闻

打断妻子多根肋骨 上市公司创始人被公诉

汽车要闻

售17.68万-21.68万元 极狐阿尔法S5正式上市

态度原创

艺术
家居
旅游
房产
游戏

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

家居要闻

空谷来音 朴素留白的侘寂之美

旅游要闻

@毕业生,江苏这些景区可享免票或优惠

房产要闻

万华对面!海口今年首宗超百亩宅地,重磅挂出!

魔兽国服停服前WLK服务器人口和排队数据,回归选服参考

无障碍浏览 进入关怀版