2017-08-03 65 views
2

我想了解,無論如何,我可以掩蓋某些類的密碼等字符串變量,這將防止在日誌記錄過程中。就像以這種方式重寫toString()方法一樣,它不會在日誌中打印。如何在日誌記錄過程中屏蔽某些字符串屬性?

例如: -

我們有一個Employee類具有以下字段: -

public class Employee { 
    private String username; 
    **private String password; //mask this field** 
    private String city; 
} 

在記錄像

LOGGER.INFO( 「打印對象:」 +員工);

這裏伐木,我想在這裏打印整個對象,員工和我的要求是它完全不打印出來蒙面場,密碼,而場的其餘部分的記錄都很好。

謝謝

+2

只需從'toString'中排除它? –

+3

重寫'toString()'方法並打印任何你需要的... – araknoid

+0

哈希密碼。 – skubski

回答

1

創建一個類調用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!"; 
    } 
} 
1

第一個明顯的選擇是覆蓋的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=***"); 

在你使用球衣,你可以添加logging filter與這樣的替換。

相關問題