本文地址:https://blog.csdn.net/qq_4088...我们写代码的时候,会写很多日志代码,但是有些敏感数据需要安全脱敏。日志脱敏的方法有很多种。常见的有①使用conversionRule标签,继承MessageConverter②写一个脱敏工具类,打印日志时返回脱敏后的具体字段。两种方式各有优缺点:第一种方式需要修改代码,不符合开闭原则。第二种方法需要对日志方法的参数进行脱敏处理,对原始日志有侵入行为。自定义脱敏组件(slf4j+logback)是一个为了打印日志写了很多代码的项目,但是后面有脱敏需求。如果我们手动更改代码,将会花费很多时间。如果引入该组件,配置后可以轻松完成脱敏。(只需三步即可轻松配置)1.自定义脱敏组件-脱敏效果演示2.自定义脱敏组件-用法1.引入Jar包依赖前提是你把Jar包放到本地仓库,Jar包请参阅下面的地址。pers.liuchengyinlogback-desensitization1.0.02、替换日志文件配置类(logback.xml)log打印方式只需要换成脱敏类即可。如果您的企业不需要它,则无需更换它。①ConsoleAppender-控制台脱敏//原类ch.qos.logback.core.ConsoleAppender//替换类pers.liuchengyin.logbackadvice.LcyConsoleAppender②RollingFileAppender-滚动文件//原类ch.qos.logback.core.rolling.RollingFileAppender//替换classpers.liuchengyin.logbackadvice.LcyRollingFileAppender③FileAppender-File//原类ch.qos.logback.core.FileAppender//替换类pers.liuchengyin.logbackadvice.LcyFileAppender替换示例:${CONSOLE_LOG_PATTERN}3.添加脱敏配置文件(logback-desensitize.yml)。这个配置文件要放在resources文件下3.自定义脱敏组件-脱敏规范1.支持八种基本数据类型及其封装类型,Map,Lis吨。业务中的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:定义了对应的key脱敏词,如申诉中的email、phone等,业务对象中的字段,Map中的Key,JSON中的Keyvalue:需要脱敏的值,如123456789@qq.com和15310763497在上诉中。4、日志规范建议写日志尽量规范。没有中文键脱敏的办法。标准化程度可以看脱敏效果demo中的代码。四、logback-desensitize.yml配置说明#日志脱敏log-desensitize:#是否忽略大小写匹配,默认为trueignore:true#是否启用脱敏,默认为falseopen:true#下的key/valuepatternisFixed脱敏规则pattern:#邮箱-@@邮箱前4-7位脱敏:"@>(4,7)"#qq邮箱-@qqemail后1-3位脱敏:"@<(1,3)"#姓名脱敏,如*Jayrenname:1,1#密码-需要完全脱敏的可以使用内置密码password:passwordpatterns:#身份证号码,后面的字段key可以匹配以下规则(逗号分隔)-key:identity,idcard#定义规则的identitycustom:#defaultRegex表示使用组件内置的规则:identity表示ID号-built-in18/15digits-defaultRegex:identityposition:9,13#内置的other表示如果其他规则无法匹配,则按此规则处理-defaultRegex:otherposition:9,10#电话号码和字段key之后可以匹配以下规则(逗号分隔)-key:phone,cellphone,mobilecustom:#手机号码-内置11位手机匹配规则-defaultRegex:phoneposition:4,7#自定义正则匹配表达式:座机号码(带区号,号码七|八位数字)-customRegex:"^0[0-9]{2,3}-[0-9]{7,8}"#-以下1-4位数字脱敏位置:"-<(1,4)"#自定义正则匹配表达式:座机号码(不带区号)-customRegex:"^[0-9]{7,8}"position:3,5#内置其他表示If其他规则匹配不上,就按照这个规则处理-defaultRegex:otherposition:1,3#不推荐这种方式-一旦匹配不上,不会脱敏-key:localMobilecustom:customRegex:"^0[0-9]{2,3}-[0-9]{7,8}"position:1,3SpringBoot的基础就不介绍了。推荐观看这个免费教程:https://github.com/javastacks/spring-boot-best-practice以上配置比较完整,必须严格遵守分层配置格式自定义脱敏支持方法一,关键:取值方法phone:4,7,表示phone属性的4-7脱敏原始数据:13610357861脱敏后:136****78612,起始符号,结束节点为脱敏标记emai:"@>(4,7)",@是脱敏标记,>表示结束节点,<表示开始节点。即@>表示对@前的进行脱敏处理,@<表示对@后的进行脱敏处理。本例是对@前的数据的4-7位进行脱敏处理。注意:这个规则中的双引号和括号不能省略,其次:和=不能用作符号,因为它们与匹配规则冲突原始数据:123456789@qq.com"@>(4,7)"后脱敏:123****89@qq.com"@<(1,3)"脱敏后:123456789@***com3,自定义常规脱敏模式:#手机号-key:phone,mobile自定义:#mobilephone号码的正则表达式-customRegex:"^1[0-9]{10}"#脱敏范围position:4,7customRegex:正则表达式,如果匹配到表达式,则使用其对应的脱敏规则(位置)4,a字段,可以根据多个值的含义进行自定义脱敏。例如,用户名字段的值可以是手机号码或电子邮件地址。该值动态变化。以前的方法都解决不了。你可以使用这个方法。patterns:-key:usernamecustom:#手机号码-11位数字-defaultRegex:phoneposition:4,7#Emailaddress-@-defaultRegex:emailposition:"@>(3,12)"#IDcard-15/18位数字-defaultRegex:identityposition:1,3#CustomRegex-customRegex:"^1[0-9]{10}"position:1,3#当没有匹配时,遵循这个规则-defaultRegex:otherposition:1,3注意:上例中匹配规则中的双引号和括号都不能省略。一种脱敏方式: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命令查看是否正常,如果显示版本号,说明正常)mvninstall:install-file-DgroupId=pers.liuchengyin-DartifactId=logback-desensitization-Dversion=1.0.0-Dpackaging=jar-Dfile=logback-desensitization-1.0.0.jar命令说明:-DgroupId表示jar对应的groupIdpers.liuchengyin-DartifactId:表示jar对应的artifactIdlogback-desensitization-Dversion表示jar对应的版本1.0.0近期热点文章推荐:1.1000+Java面试题及答案(2022最新版)2.厉害了!Java协程来了。..3.SpringBoot2.x教程,太全面了!4.不要用爆破爆满画面,试试装饰者模式,这才是优雅的方式!!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!