关于java:Spring-Boot-日志脱敏3-步搞定So-easy

40次阅读

共计 4516 个字符,预计需要花费 12 分钟才能阅读完成。

本文地址: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 中的 Key
  • value:须要脱敏的值,如上诉的123456789@qq.com15310763497

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 开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞 + 转发哦!

正文完
 0