news 2026/5/10 7:36:35

logback日志脱敏、FASTJSON日志脱敏

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
logback日志脱敏、FASTJSON日志脱敏

目录

一、日志脱敏

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

创建自定义转换器

logback.xml追加conversionRule配置

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

toJSONString方法介绍

创建自定义过滤器


一、日志脱敏

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

创建自定义转换器

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

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

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里面是什么

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

比如这样:

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; } }

或者这样:

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配置

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

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

toJSONString方法介绍

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

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

创建自定义过滤器

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

/** * @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; } }
Personal personal = new Personal(); personal.setIdNum("4112723199909083216"); log.info("查询个人信息结果:{},当前用户:{}", JSON.toJSONString(personal,SimpleValueFilter.getInstance()), "xrh");
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 7:34:03

基于Vue 3与Vite的fast-soy-admin:现代化中后台管理系统脚手架深度解析

1. 项目概述&#xff1a;一个为现代Web应用提速的“脚手架”如果你是一名前端开发者&#xff0c;或者正在负责一个中后台管理系统的搭建&#xff0c;那么“脚手架”这个词对你来说一定不陌生。它就像建筑工地的脚手架&#xff0c;为我们搭建应用的主体结构提供了稳固的支撑和便…

作者头像 李华
网站建设 2026/5/10 7:29:56

AI应用成本计算利器tokencost:精准追踪LLM API调用费用

1. 项目概述&#xff1a;一个为AI应用算清“经济账”的利器最近在折腾各种大语言模型&#xff08;LLM&#xff09;应用&#xff0c;从简单的聊天机器人到复杂的多智能体工作流&#xff0c;有一个问题总是绕不开&#xff1a;成本。每次调用GPT-4、Claude-3或者使用那些动辄千亿参…

作者头像 李华
网站建设 2026/5/10 7:27:45

物联网硬件安全:从加密加速到PUF技术实践

1. 物联网安全架构的硬件基石在智能电表遭遇恶意固件升级、智能门锁被无线破解的案例频发的今天&#xff0c;硬件级安全防护已成为物联网设备的刚需。我曾参与某工业传感器项目的安全审计&#xff0c;发现多数漏洞源于开发者在设计初期对硬件信任链的忽视。真正的物联网安全必须…

作者头像 李华
网站建设 2026/5/10 7:20:17

英雄联盟界面定制新纪元:在合规边界内重塑你的游戏身份

英雄联盟界面定制新纪元&#xff1a;在合规边界内重塑你的游戏身份 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 想象一下&#xff0c;你刚刚开始英雄联盟的征程&#xff0c;但好友列表里那些闪亮的段位图标让你感到些许压力…

作者头像 李华
网站建设 2026/5/10 7:14:14

CANN/ge Tiling下沉特性分析

Tiling 下沉&#xff08;Tiling Sink&#xff09;特性分析 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型…

作者头像 李华