Spring Boot 日志脱敏,3 步搞定!So easy~!

莱莱  金牌会员 | 2022-9-17 02:28:51 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 908|帖子 908|积分 2724

本文地址:https://blog.csdn.net/qq_40885085
在我们写代码的时候,会书写许多日志代码,但是有些敏感数据是需要进行安全脱敏处理的。
对于日志脱敏的方式有很多,常见的有①使用conversionRule标签,继承MessageConverter②书写一个脱敏工具类,在打印日志的时候对特定特字段进行脱敏返回。
两种方式各有优缺点:

  • 第一种方式需要修改代码,不符合开闭原则。
  • 第二种方式,需要在日志方法的参数进行脱敏,对原生日志有入侵行为。
自定义脱敏组件(slf4j+logback)

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



二、自定义脱敏组件 - 使用方式

1、引入Jar包依赖

前提是你将Jar包打入本地仓库,Jar包地址见后文。
  1. <dependency>
  2.     <groupId>pers.liuchengyin</groupId>
  3.     <artifactId>logback-desensitization</artifactId>
  4.     <version>1.0.0</version>
  5. </dependency>
复制代码
2、替换日志文件配置类(logback.xml)

日志打印方式都只需要替换成脱敏的类即可,如果你的业务不需要,则无需替换。
①ConsoleAppender - 控制台脱敏
  1. // 原类
  2. ch.qos.logback.core.ConsoleAppender
  3. // 替换类
  4. pers.liuchengyin.logbackadvice.LcyConsoleAppender
复制代码
②RollingFileAppender - 滚动文件
  1. // 原类
  2. ch.qos.logback.core.rolling.RollingFileAppender
  3. // 替换类
  4. pers.liuchengyin.logbackadvice.LcyRollingFileAppender
复制代码
③FileAppender - 文件
  1. // 原类
  2. ch.qos.logback.core.FileAppender
  3. // 替换类
  4. pers.liuchengyin.logbackadvice.LcyFileAppender
复制代码
替换示例:
  1. <property name="CONSOLE_LOG_PATTERN"
  2.           value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/>
  3. <appender name="CONSOLE" >
  4.     <encoder>
  5.         <pattern>
  6.             ${CONSOLE_LOG_PATTERN}
  7.         </pattern>
  8.     </encoder>
  9. </appender>
复制代码
3、添加脱敏配置文件(logback-desensitize.yml)

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

三、自定义脱敏组件 - 脱敏规范

1、支持数据类型

八大基本类型及其包装类型、Map、List、业务里的Pojo对象、List、JSON字符串。
注:在配置文件中配置的时候,只需要配置对象里的属性值就行。
2、不支持的数据类型

List,因为不知道脱敏的数据源具体是哪一个。
3、匹配规则

key + 分割符 + value,目前仅支持冒号(:)和等号(=),示例如下:
  1. log.info("your email:{}, your phone:{}", "123456789@qq.com","15310763497");
  2. log.info("your email={}, your cellphone={}", "123456789@qq.com","15310763497");
复制代码

  • key:定义了对应需要脱敏的关键字,如上诉的email、phone等以及业务对象中的字段、Map中的Key、JSON中的Key
  • value:需要脱敏的值,如上诉的123456789@qq.com、15310763497。
4、日志规范

建议书写日志的时候尽量规范,对于key为中文的是没有办法脱敏的,规范程度可以见脱敏效果演示里的代码。
四、logback-desensitize.yml配置说明

[code]# 日志脱敏log-desensitize:  # 是否忽略大小写匹配,默认为true  ignore: true  # 是否开启脱敏,默认为false  open: true  # pattern下的key/value为固定脱敏规则  pattern:    # 邮箱 - @前第4-7位脱敏    email: "@>(4,7)"    # qq邮箱 - @后1-3位脱敏    qqemail: "@(4,7)",@为脱敏标志,>表示其为结束节点,表示对@之前的进行脱敏,@

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莱莱

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表