日志脱敏
如何利用日志打印时把敏感信息脱敏
这里利用的是map类型,如果想用其他类型可以转成别的类型
public static Map excludeLogInfo(Map<String, String> maps){
try {
Map<String, String> tempMaps = new HashMap<String, String>();
if (null == maps || maps.isEmpty()) {
return maps;
}
for (Map.Entry<String, String> entry : maps.entrySet()) {
if ("敏感字段2".equals(entry.getKey()) || "手机号".equals(entry.getKey()) ) {
tempMaps.put(entry.getKey(), "******");
}else{
tempMaps.put(entry.getKey(), entry.getValue());
}
}
return tempMaps;
} catch (Exception e) {
// 过滤出现异常,记录日志,程序不会终止,继续往下执行
log.error("执行过滤报文中敏感信息异常:", e);
return maps;
}
}
打印结果`
public static void main(String[] agre){
Map<String, String> map=new HashMap<>();
map.put("敏感字段","13500000000");
map.put("敏感字段2","36242100000000000");
System.out.println(excludeLogInfo(map));
}
如果敏感字段比较多的话,可以用利用枚举来判断,或者用常量也行都一样。
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang.StringUtils;
@Getter
@AllArgsConstructor
public enum TestEnum {
/**
* 手机号
*/
MGZD("手机号","000000000"),
/**
* 证件号
*/
MGZD2("证件号","00000000000000000000");
/**
* key
*/
private String code;
/**
* vlue
*/
private String desc;
/**
* 匹配对应敏感字符
* @param code
* @return
*/
public static Boolean getBranch(String code){
for(TestEnum testEnum : TestEnum.values()){
if(StringUtils.equals(testEnum.getCode(),code)){
return true;
}
}
return false;
}
}