2017-07-07 96 views
0

我正在創建一個應用程序,我計劃對用戶的機密數據進行採樣。但對於調試問題,我打算記錄這些值,比如哪個用戶名有問題。但不想記錄他們的密碼。機密數據的自定義註釋

我有這樣的示例代碼:

StringBuffer errorBuilder = new StringBuffer(); 
violations.forEach(v -> errorBuilder.append("\r\n\"") 
          .append(v.getPropertyPath()) 
          .append("\": ") 
          .append(v.getMessage()) 
          .append(" -- ") 
          .append(v.getInvalidValue())); // Avoid print here 
return errorBuilder.toString(); 

這是樣本類

@Getter 
@Setter 
public class UserCredentials { 
    @NotNull 
    @Size(min=5, max=15) 
    private String username; 

    @NotNull 
    @Pattern(regex=Constants.Regex.PASSWORD) 
    private String password; 

    @NotNull 
    @Pattern(regex=Constants.Regex.DOB) 
    private String dob; 

    @NotNull 
    @Pattern(regex=Constants.Regex.EMAIL) 
    private String email; 
} 

有兩種方式,我想: 要在列表中,並檢查放置一個「密碼」如果getPropertyPath包含列表中的值並避免打印invalidValue。

但是,有沒有任何註釋或可以有任何註釋,如@Confidential,我可以避免打印此值。

我不介意創建自定義註釋。我認爲這樣更清潔,我不必每次都寫我在列表中檢查爲機密的字段名稱。

我覺得做這樣的:

StringBuffer errorBuilder = new StringBuffer(); 
violations.forEach(v -> { 
if (v.getPropertyPath() has annotation @Confidential) { // Looking for this. 
    errorBuilder.append("\r\n\"") 
           .append(v.getPropertyPath()) 
           .append("\": ") 
           .append(v.getMessage()) 
} else { 
    errorBuilder.append("\r\n\"") 
           .append(v.getPropertyPath()) 
           .append("\": ") 
           .append(v.getMessage()) 
           .append(" -- ") 
           .append(v.getInvalidValue())); 
} 
}); 
return errorBuilder.toString(); 

如何建立這個註解,並檢查這些場景有什麼想法?

回答

0

一個變通的思考 -

在我的POJO,我已經把上的toString異常()。

@Getter 
@Setter 
@ToString(exclude="password") 
public class UserCredentials { 
    @NotNull 
    @Size(min=5, max=15) 
    private String username; 

    @NotNull 
    @Pattern(regex=Constants.Regex.PASSWORD) 
    private String password; 

    @NotNull 
    @Pattern(regex=Constants.Regex.DOB) 
    private String dob; 

    @NotNull 
    @Pattern(regex=Constants.Regex.EMAIL) 
    private String email; 
} 

而擺僅此邏輯:

StringBuffer errorBuilder = new StringBuffer(); 
violations.forEach(v -> { 
    errorBuilder.append("\r\n\"") 
           .append(v.getPropertyPath()) 
           .append("\": ") 
           .append(v.getMessage()) 
}); 
return errorBuilder.toString(); 

和放置日誌時我消耗爲驗證POJO和之後立即印刷在驗證的誤差(如果存在誤差)。