0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SpringBoot日志脱敏的方式介绍

jf_ro2CN3Fa 来源:csdn 2023-01-09 10:49 次阅读

前言

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

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

两种方式各有优缺点:

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

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

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

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

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

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

7078b60c-837d-11ed-bfe3-dac502259ad0.png708a6406-837d-11ed-bfe3-dac502259ad0.png

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

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}



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

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

70a00bee-837d-11ed-bfe3-dac502259ad0.png

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

1、支持数据类型

八大基本类型及其包装类型、Map、List、业务里的Pojo对象、List<业务里的Pojo对象>、JSON字符串。

注:在配置文件中配置的时候,只需要配置对象里的属性值就行。

2、不支持的数据类型

List<八大基本类型及包装类型>,因为不知道脱敏的数据源具体是哪一个。

3、匹配规则

key + 分割符 + value,目前仅支持冒号(:)和等号(=),示例如下:

log.info("youremail:{},yourphone:{}","123456789@qq.com","15310763497");
log.info("youremail={},yourcellphone={}","123456789@qq.com","15310763497");

key:定义了对应需要脱敏的关键字,如上诉的email、phone等以及业务对象中的字段、Map中的Key、JSON中的Key

value:需要脱敏的值,如上诉的123456789@qq.com、15310763497。

4、日志规范

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

四、logback-desensitize.yml配置说明

>基于SpringCloudAlibaba+Gateway+Nacos+RocketMQ+Vue&Element实现的后台管理系统+用户小程序,支持RBAC动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
>
>*项目地址:
>*视频教程

#日志脱敏
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下指定的方式进行脱敏。

70ae0bc2-837d-11ed-bfe3-dac502259ad0.png

Jar包打入Maven本地仓库的方式

1、下载Jar包,放在一个文件夹里

2、在这个文件夹里打开cmd(打开cmd,进入到这个文件夹)

3、执行命令(前提保证maven配置正常,使用mvn -v命令查看是否正常,如果显示版本号表示正常)

mvninstall: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







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JSON
    +关注

    关注

    0

    文章

    111

    浏览量

    6819
  • SpringBoot
    +关注

    关注

    0

    文章

    172

    浏览量

    106

原文标题:Spring Boot 3 步完成日志脱敏,简单实用~

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    SpringBoot中的Druid介绍

    SpringBoot中Druid数据源配置
    发表于 05-07 09:21

    基于SpringBoot mybatis方式的增删改查实现

    SpringBoot mybatis方式实现增删改查
    发表于 06-18 16:56

    SpringBoot知识总结

    SpringBoot干货学习总结
    发表于 08-01 10:40

    怎样去使用springboot

    怎样去使用springboot呢?学习springboot需要懂得哪些?
    发表于 10-25 07:13

    如何实现SpringBoot项目中的隐私数据脱敏

    数据脱敏:把系统里的一些敏感数据进行加密处理后再返回,达到保护隐私作用
    的头像 发表于 01-08 10:25 1386次阅读

    SpringBoot+Vue实现网页版人脸登录、人脸识别案例解析

    Springboot,Mysql,JWT,VUE 2.X 等等技术实现,主要功能点:人脸列表CRUD,日志列表CRUD,基于自建人脸库通过base64编码方式存储人脸图片,通过调用腾讯云人脸对比API场景实现。
    发表于 02-23 15:36 801次阅读

    SpringBoot+Vue实现网页版人脸登录、人脸识别

    技术点:Springboot,Mysql,JWT,VUE 2.X 等等技术实现,主要功能点:人脸列表CRUD,日志列表CRUD,基于自建人脸库通过base64编码方式存储人脸图片,通过调用腾讯云人脸对比API场景实现
    的头像 发表于 03-07 09:27 739次阅读

    什么是 SpringBoot

    本文从为什么要有 `SpringBoot`,以及 `SpringBoot` 到底方便在哪里开始入手,逐步分析了 `SpringBoot` 自动装配的原理,最后手写了一个简单的 `start` 组件,通过实战来体会了 `
    的头像 发表于 04-07 11:28 1029次阅读
    什么是 <b class='flag-5'>SpringBoot</b>?

    如何实现一个注解进行数据脱敏

      什么是数据脱敏 开胃菜 使用 Hutool 工具类实现数据掩码 使用 Jackson 进行数据序列化脱敏 注解实现数据脱敏 1、定义一个注解 2、创建一个枚举类 3、创建我们的自定义序列化
    的头像 发表于 06-14 09:37 671次阅读
    如何实现一个注解进行数据<b class='flag-5'>脱敏</b>

    什么是数据脱敏?常用的脱敏规则有哪些呢?

    数据脱敏,指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。
    的头像 发表于 08-15 10:04 1w次阅读
    什么是数据<b class='flag-5'>脱敏</b>?常用的<b class='flag-5'>脱敏</b>规则有哪些呢?

    SpringBoot 连接ElasticSearch的使用方式

    SpringBoot,今天我们就以 SpringBoot 整合 ElasticSearch 为例,给大家详细的介绍 ElasticSearch 的使用! SpringBoot 连接
    的头像 发表于 10-09 10:35 426次阅读

    Loguru日志记录器的安装方式

    Loguru 一个能彻底解放你的日志记录器。 它即插即用,具备多种方式滚动日志、自动压缩日志文件、定时删除等功能。 除此之外,多线程安全、高亮日志
    的头像 发表于 10-16 11:35 395次阅读
    Loguru<b class='flag-5'>日志</b>记录器的安装<b class='flag-5'>方式</b>

    SpringBoot采用JsonSerializer和Aop实现可控制的数据脱敏

    的确实现了数据脱敏,但是有个问题现在的脱敏针对的是 只要对该实体类进行了使用返回的接口,中的数据都会进行脱敏,在有些场景下是不需要的,所以说要进行改进。
    的头像 发表于 11-06 16:15 431次阅读
    <b class='flag-5'>SpringBoot</b>采用JsonSerializer和Aop实现可控制的数据<b class='flag-5'>脱敏</b>

    盘点一下PostgreSQL的几种常用脱敏方式

    PostgreSQL Anonymizer 实现动态脱敏方式是通过将定义某个角色为 "MASKED" 以及脱敏规则。被授予 "MASKED" 角色的用户将无法访问原始数据,而其他角色仍然可以访问。它现已支持多种的
    的头像 发表于 12-05 09:59 230次阅读
    盘点一下PostgreSQL的几种常用<b class='flag-5'>脱敏</b><b class='flag-5'>方式</b>

    数据脱敏的3种常见方案,好用到爆!

    数据脱敏插件,目前支持地址脱敏、银行卡号脱敏、中文姓名脱敏、固话脱敏、身份证号脱敏、手机号
    的头像 发表于 02-25 16:14 361次阅读
    数据<b class='flag-5'>脱敏</b>的3种常见方案,好用到爆!