log4j-1.x 日志脱敏 扩展PatternLayout类+修改log4j.properties

背景

项目做完,公司安全测试,说系统有安全漏洞,日志中未对用户信息进行脱敏处理,需要我对手机号进行脱敏处理,至少隐藏四位。锅从天上来,一期的项目的安全漏洞,之前没有安全测试,二期项目结束,测出来了,一脸懵的我~
好学和负责任的我(没办法,后来就算不算是二期项目的锅,我是系统Owner,最后还是算是系统问题),开始找资料怎么修复,网上一堆资料,怕个啥。

过程

项目使用的log4j-1.2.16.jar
浏览了很多网页的我,最后有些难受,脱敏的文章,基本上都是基于logback和log4j2的,关于log4j-1.2.16的,找到可用的文章参考总结为以下3种方法:

  1. 直接把要打印之前,把内容替换掉,这个可行,但是是个笨方法,要看每条有手机号的日志有哪些,然后去替换,难受呀,代码不美观,工作量多而且有可能会漏掉;
  2. 把 log4j-1.2.16换成 logback和log4j2,然后再脱敏,工作量同样不小,包名啥的也都不一样,身边的小伙伴建议我不要轻易动这一块,工作量太大,有可能会有大坑;
  3. 重写过滤器,我查了一些文章,没搞懂;
  4. 扩展PatternLayout类,具体怎么扩展,看了一下,不明白;

想扩展PatternLayout类,但又不知如何下手的我,后来就去看了log4j-1.2.16.jar的源码,就只修改log4j.properties和新增了一个ExPatternLayout.class(基本上是org.apache.log4j.PatternLayout类的代码,没改几行代码)

正则表达式只对连续11位数字且开头是1的进行处理,连续数字超过11位的不认为是手机号,不处理

代码

package com.xiaoxi.log;

import org.apache.log4j.PatternLayout;
import org.apache.log4j.helpers.PatternConverter;
import org.apache.log4j.spi.LoggingEvent;

/**
 * 扩展PatternLayout类 
 * 日志手机号码脱敏 第1位数字为1 连续 11位数字 第12位非数字 中间4位用*代替
 */
public class ExPatternLayout extends PatternLayout {
   
   
	private static final String REGEX = "1(\\d{2})\\d{4}(\\d{4})(\\D)";
	//$1,$2...是表示的小括号里的内容 $1是第一个小括号里的 ,$2是第2个小括号里的
	//$1=(\\d{2}), $2=(\\d{4})
	private static final String REPLACEMENT = "1$1****$2";

	private StringBuffer sbuf = new StringBuffer(256);
	private String pattern;
	private PatternConverter head;
	PatternLayout patternLayout;

	public ExPatternLayout() {
   
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值