有没有办法屏蔽类的某些字符串变量,如密码等,这将在日志记录期间阻止?就像以这种方式覆盖toString()
方法一样,它不会在日志中打印。
例如,我们有一个班级员工,其中包含以下字段:
public class Employee {
private String username;
**private String password; //mask this field**
private String city;
}
在日志记录期间,例如
LOGGER.INFO("打印对象:"+员工(;
在日志记录中,我正在尝试打印整个对象,这里的员工,我的要求是它根本不打印出屏蔽字段、密码,而其余字段的日志记录很好。
第一个明显的选项是覆盖 toString((,例如:
public class Employee {
private String username;
private String password;
private String city;
@Override
public String toString() {
return "username=" + username + " city=" + city;
}
public static void main(String[] args) {
System.out.println(new Employee().toString());
}
}
您还可以从日志记录中替换密码字符串,例如
String maskedPassword = s.replaceAll("password=[^&]*", "password=***");
在使用球衣时,您可以添加带有此类替换的日志记录过滤器。
创建一个名为 MaskedString 的类,它基本上只是 String 的替代品,但有一个不输出实际密码的 toString 方法:
public class MaskedString(){
private String maskedString;
MaskedString(){
maskedString = "";
}
MaskedString(String string){
maskedString = string;
}
public String getActualString(){
return maskedString;
}
public String setString(String string){
maskedString = string;
}
public String toString(){
return "Not the actual string!";
}
}
如果您使用的是龙目岛,请尝试 ToString 的排除选项。
@Data
@ToString(exclude = {"password"})
public class Employee {
private String username;
private String password;
private String city;
}