在日志记录期间屏蔽Java中的某些字符串属性?
是否有一种方法可以屏蔽类的某些字符串变量,如密码等,以防止在日志记录过程中出现这种情况?与重写在日志记录期间屏蔽Java中的某些字符串属性?,java,logging,masking,Java,Logging,Masking,是否有一种方法可以屏蔽类的某些字符串变量,如密码等,以防止在日志记录过程中出现这种情况?与重写toString()方法类似,它不会在日志中打印 例如,我们有一个具有以下字段的类Employee: public class Employee { private String username; **private String password; //mask this field** private String city; } 在日志记录期间 LOGGER.INFO(
toString()
方法类似,它不会在日志中打印
例如,我们有一个具有以下字段的类Employee:
public class Employee {
private String username;
**private String password; //mask this field**
private String city;
}
在日志记录期间
LOGGER.INFO(“打印对象:+employee”)强>
在日志记录中,我试图打印整个对象,我的要求是,不打印屏蔽字段,密码,而其余字段的日志记录是可以的。创建一个名为MaskedString的类,该类基本上只是字符串的替换,但有一个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(),例如:
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=***");
在您使用jersey时,您可以添加此类替换。如果您使用的是lombok,请尝试ToString的排除选项
@Data
@ToString(exclude = {"password"})
public class Employee {
private String username;
private String password;
private String city;
}
只需将其从
toString
中排除即可。覆盖toString()
方法并打印所需内容…散列密码。