【问题标题】:hibernate validator: validate 2 fields match休眠验证器:验证 2 个字段匹配
【发布时间】:2010-12-10 08:12:10
【问题描述】:

我想知道,我是否忽略了某些东西,或者休眠验证器没有提供注释来验证 2 个字段是否相等(例如密码)。 我知道我可以编写自己的验证器,但这似乎是标准功能。

【问题讨论】:

标签: bean-validation hibernate-validator javax.validation


【解决方案1】:

如果您使用的是 Spring 框架,那么您可以使用 Spring 表达式语言 (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】:

    刚刚选择了自定义验证器路线。这里的其他2个答案与这个问题并没有真正的关系。 通过谷歌搜索,我找到了一个 fieldmatch 示例。

    【讨论】:

      【解决方案3】:

      Hibernate 是一个 ORM 映射器。

      它用于将数据持久化到数据库中并再次提取。因此,拥有两个具有相同值的字段没有多大意义(从持久性的角度来看)。那是你应该检查你的业务逻辑的东西。

      我和 Junesh 在一起...不要以可检索的格式保留您的密码...查找 Hasing 和 Salting - 或者更好的是,考虑 openID,这样您就不必再用另一个愚蠢的密码来打扰您的客户了.. .

      【讨论】:

      • 我使用了hibernate标签,因为没有hibernate-validator标签,我还不能创建新标签。当然,我不会保护确认字段。
      【解决方案4】:

      我希望您也不要将确认密码保存在数据库中。您没有任何开箱即用的验证,但您必须使用自定义注释,这也非常简单。

      【讨论】:

      • 我使用了hibernate标签,因为没有hibernate-validator标签,我还不能创建新标签。当然,我不会保护确认字段。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      相关资源
      最近更新 更多