我正在创建一个应用程序,我计划在其中获取用户的机密数据。但是对于调试问题,我打算记录值,例如哪个用户名存在问题。但是不想记录他们的密码。
我有这个示例代码:
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 :(得分: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进行验证时放置日志,并在验证后立即打印错误(如果有错误)。