在日志记录期间屏蔽 Java 中的某些字符串属性?



有没有办法屏蔽类的某些字符串变量,如密码等,这将在日志记录期间阻止?就像以这种方式覆盖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;
}

最新更新