Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在日志记录期间屏蔽Java中的某些字符串属性?_Java_Logging_Masking - Fatal编程技术网

在日志记录期间屏蔽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()
方法并打印所需内容…散列密码。