2017-07-07 102 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和之后立即印刷在验证的误差(如果存在误差)。