我正在创建一个应用程序,我计划在其中获取用户的机密数据。但是对于调试问题,我计划记录存在问题的用户名等值。但不想记录他们的密码。
我有这个示例代码:
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();
关于如何创建此注释并检查这些场景的任何想法?