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();

关于如何创建此注释并检查这些场景的任何想法?

4

1 回答 1

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 进行验证时放置日志,并在之后立即打印验证错误(如果有错误)。

于 2017-07-13T13:45:56.113 回答