大家项目中肯定都会用到日志打印,目的是为了以后线上排查问题方便,但是有些企业对输出的日志包含的敏感(比如:用户身份证号,银行卡号,手机号等)信息要进行脱敏处理。
哎!我们最近就遇到了日志脱敏的改造。可以说是一波三折。
浩浩荡荡的日志脱敏改造就这样开始..........
第一季 :在项目中所有log.info方法输出日志的地方手工脱敏,很low的一种方法
初期想法很简单,就是根据业务,判断哪些info输出的地方可能包含敏感信息,然后进行手工脱敏。但是有很大弊端,一是工作量大,二是业务不熟悉很难一次改全。
脱敏工具类:
package com.lsl.utills;
public class Utils {
public static String checkParams(String str){
if (str != null){
String strnew = str.replaceAll("1[3-9]\\d{9}","***");
return strnew;
}else {
return "";
}
}
}
代码中调用这个工具类:
package com.lsl.controller;
import com.lsl.utills.Utils;
import com.lsl.vo.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/lsl")
public class LogbackTestController {
private static final Logger LOG = LoggerFactory.getLogger(LogbackTestController.class);
@PostMapping(value = "qryUser", produces = "application/json;charset=UTF-8")
@ResponseBody
public String qryUser(){
User user = new User();
user.setUserName("LSL");
user.setUserPwd("123@asd");
user.setUserAddr("北京海淀");
user.setUserAge(21);
user.setUserTel("15803125588");
LOG.info("用户信息:{}",user.toString());
LOG.info("脱敏后的用户信息:{}", Utils.checkParams(user.toString()));
return "success";
}
}
结果截图:
这种情况确实也能达到脱敏的目的,但是如果代码中有好多info日志输出,那么都需要改动,工作量太大,还容易拉下没有改动的地方。其实我们初期就是这种脱敏,反复改了好几次,总有遗漏的地方忘记改了。
第二季:想研究一种省时省力的方式&