logback日志脱敏、FASTJSON日志脱敏

目录

一、日志脱敏

1.logback转换器实现日志脱敏

创建自定义转换器

logback.xml追加conversionRule配置

2.FASTJSON序列化实现日志脱敏

toJSONString方法介绍

创建自定义过滤器


一、日志脱敏

1.logback转换器实现日志脱敏

创建自定义转换器

logback自定义转换器不需要修改原来代码,在日志打印时可以对参数自动处理,可维护性强。logback官方文档convert转换器介绍

创建自定义转换类MySampleConverter, 继承MessageConverter类,并实现convert方法。

java 复制代码
import ch.qos.logback.classic.pattern.MessageConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
 
public class MySampleConverter extends MessageConverter {
    public String convert(ILoggingEvent event) {
        return event.getFormattedMessage();
    }
}

让我们来看一下event里面是什么

介不就是格式化后的日志吗!怎么改呢?加密算法可以自己选。

比如这样:

java 复制代码
 public class MySampleConverter extends MessageConverter {
 
    @Override
    public String convert(ILoggingEvent event) {
        String formattedMessage = event.getFormattedMessage();
        //TODO 1.找到FormattedMessage中idNum的位置
 
        //TODO 2.获取idNum的值并进行MD5加密 DigestUtils.md5DigestAsHex("".getBytes());
 
        //TODO 3.将加密后的值替换到原来的位置
        return formattedMessage;
    }
}

或者这样:

java 复制代码
public class MySampleConverter extends MessageConverter {
 
    @Override
    public String convert(ILoggingEvent event) {
        //TODO 1.获取需要格式化的参数数组
        Object[] argumentArray = event.getArgumentArray();
        if (null != argumentArray) {
            //TODO 2.循环对数组中的idNum加密 DigestUtils.md5DigestAsHex("".getBytes());
 
            //TODO 3.将加密后的数组进行格式化
            
            return MessageFormatter.arrayFormat(event.getMessage(), argumentArray).getMessage();
        } else {
            return event.getFormattedMessage();
        }
    }
 
}

就是提供个思路,长得帅的哥们自己琢磨吧。

logback.xml追加conversionRule配置

XML 复制代码
<!-- 当前配置一定要加到第一行,放到下面会不生效 -->
<conversionRule conversionWord="msg" converterClass="com.api.filter.MySamepleConverter"></conversionRule>

2.FASTJSON序列化实现日志脱敏

toJSONString方法介绍

我们打印日志的时候会用JSON.toJSONString() 对对象进行序列化,要不然打印出来的就是一串看不懂的内存地址。可以看到toJSONString的方法的参数可以传SerializeFilter接口。

看下SerializeFilter接口的实现类都有哪些,显然这个ValueFilter可以对要序列化的值进行过滤。

创建自定义过滤器

我们只需要自定义一个SimpleValueFilter类,实现ValueFilter接口,重写process方法,匹配到需要加密的字段进行加密返回即可。

java 复制代码
/**
 * @author xrh
 * @date 2022-09-21
 * @description 打印日志时对敏感信息加密
 */
public class SimpleValueFilter implements ValueFilter {
 
    private List filterName = Arrays.asList("idNum", "certNo");
 
    @Override
    public Object process(Object obj, String name, Object value) {
        try {
            if (filterName.contains(name)) {
                return DigestUtils.md5DigestAsHex(value.toString().getBytes());
            }
        } catch (Exception e) {
            return value;
        }
        return value;
    }
 
    private static final SimpleValueFilter simpleValueFilter = new SimpleValueFilter();
 
    public static SimpleValueFilter getInstance() {
        return simpleValueFilter;
    }
}
java 复制代码
Personal personal = new Personal();
personal.setIdNum("4112723199909083216");
log.info("查询个人信息结果:{},当前用户:{}", JSON.toJSONString(personal,SimpleValueFilter.getInstance()), "xrh");
相关推荐
雨辰AI3 天前
SpringBoot3 + 人大金仓 V9 全栈日志实战:Logback + Loki + Filebeat 构建统一日志平台
java·数据库·后端·云原生·eureka·logback·政务
NEGl DRYN18 天前
Spring Boot 3.3.4 升级导致 Logback 之前回滚策略配置不兼容问题解决
java·spring boot·logback
eSsO KERF21 天前
使用 Logback 的最佳实践:`logback.xml` 与 `logback-spring.xml` 的区别与用法
xml·spring·logback
色空大师1 个月前
【日志文件配置详解】
java·logback·log4j2·日志
成为大佬先秃头1 个月前
日志框架:Logback
springboot·logback
回到原点的码农1 个月前
Spring Boot 3.3.4 升级导致 Logback 之前回滚策略配置不兼容问题解决
java·spring boot·logback
shark22222221 个月前
springboot中配置logback-spring.xml
spring boot·spring·logback
一生了无挂1 个月前
springboot使用logback自定义日志
java·spring boot·logback
pupudawang1 个月前
使用 Logback 的最佳实践:`logback.xml` 与 `logback-spring.xml` 的区别与用法
xml·spring·logback