当前位置: 首页 > news >正文

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");
http://www.jsqmd.com/news/788104/

相关文章:

  • Seraphine:英雄联盟智能辅助工具完全指南,提升你的游戏体验
  • 开源项目导航指南:高效学习与贡献的开发者实战手册
  • 集成电路工艺节点逻辑单元相似性分析与硬件安全检测
  • 百度网盘直链解析终极指南:3分钟实现高速下载突破
  • 3步实现高效B站视频转文字的智能解决方案
  • DownKyi终极指南:5步掌握B站视频批量下载与高清保存技巧
  • AI产品经理技能包:从文本生成到决策引擎的实战指南
  • 3步打造你的Unity游戏实时翻译神器
  • 大麦网演唱会抢票脚本终极指南:高效自动化购票解决方案
  • 2026年附近电机维修选购指南排名 - mypinpai
  • Windows右键菜单管理终极指南:ContextMenuManager高效解决方案
  • 从Azure Event Hub读取压缩数据的PySpark实践
  • 基于Vue 3与File System API构建本地Markdown知识库管理器
  • Lanerra/Saga:微服务架构下分布式事务的Saga编排模式实践指南
  • Linux 的 tty 命令
  • MG6400,MG7180,MG8180,MG8280,MP288,MP236,MP259,E608,TS8380,E518报错5B00,P07,E08,1700,5b04废墨垫清零,亲测有用。
  • influxdb数据库笔记
  • 2026年GEO推广代理口碑哪家好? - mypinpai
  • AIDD开源框架harness:模块化设计加速AI药物发现全流程
  • AI代理框架ProxyAI解析:从核心原理到实战应用
  • Matlab快捷键的奥秘:探索和自定义
  • AI赋能新生儿眼底筛查:从手工特征到深度学习的ROP诊断技术演进
  • 初创公司如何利用Taotoken低成本试验多种大模型能力
  • NeuroRebuild™神经重构技术白皮书——赋能港口动态目标全维度空间还原
  • Linux 的 uname 命令
  • Taotoken模型广场如何辅助开发者进行模型选型决策
  • 2026年,探讨GEO优化企业怎么选? - mypinpai
  • 2026年靠谱制冷压缩机维修价格 - 工业品牌热点
  • Seraphine:英雄联盟玩家的智能助手,5大功能提升你的游戏体验
  • Blender 3MF插件完整指南:如何在Blender中直接处理3D打印文件