我想知道,我是否忽略了某些内容,或者休眠验证器没有提供注释来验证两个字段是否相等(例如密码)。我知道我可以编写自己的验证器,但这似乎是标准功能。
如果您使用的是Spring Framework,则可以使用Spring Expression Language(SpEL)。我编写了一个小型库,该库提供了基于SpEL的JSR-303验证器,该验证器使跨字段验证非常容易。看看https://github.com/jirutka/validator-spring。
当其中至少一个不为空时,这将验证密码字段的相等性。
@SpELAssert(value = "password.equals(passwordVerify)",
applyIf = "password || passwordVerify",
message = "{validator.passwords_not_same}")
public class User {
private String password;
private String passwordVerify;
}
只是去了定制验证器路线。这里的其他2个答案与问题无关。经过一番谷歌搜索,我找到了一个fieldmatch示例。
休眠是ORM映射器。
它用于将数据持久保存到数据库中并再次提取。这样,具有2个具有相同值的字段就没有多大意义(从持久性的角度来看)。那就是您应该在业务逻辑中检查的内容。
而且我和Junesh在一起...不要以可检索的格式保留密码...查找Hasing and Salting-甚至更好的是,考虑一下openID,这样您就不必再用另一个愚蠢的密码来打扰客户了...
我希望您也不要在数据库中保存确认密码。您没有为此提供任何现成的验证,但是您将不得不使用自定义注释,这也非常简单。