在grails中实现密码规则

时间:2012-04-02 23:50:48

标签: grails passwords policy

我希望将密码规则实现为最小长度8和字母数字。现在将检查新字段和确认字段,这些规则应在创建用户的新实例时应用,并且还应更改现有用户的密码功能。 1)如果有一个grails插件可以做到这一点。 2)基于javascript的验证是一个很好的策略,如果不是我怎么能在没有插件的情况下手动完成。 提前致谢

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

Ray建议应该工作,因为他所指的是自定义验证,这也是1.3.7的一部分。 (它只是指的是2.0的文档)你只需要在自定义验证中写下所有规则,在将对象持久化到数据库之前,它将根据所有这些规则进行验证,或者你可以调用验证任何时候对象的()方法在保存之前验证值。

来到你问题的第二部分:你是否应该对它进行javascript检查。

答案是肯定的。由于客户端验证将确保用户体验更好并且服务器端验证将保持数据的完整性,因此始终确保客户端和服务器端验证都很合适。虽然客户端验证也会确保完整性,但由于这些可以通过,所以你不应该只依赖它们。

希望这有帮助。

答案 2 :(得分:0)

我可以想到两种方法。 @ ray-tayek假设密码存储为域类字段,但这不够私密:密码将通过网络(无论是内联网还是互联网)以纯文本形式发送,并保存到数据库以同样的方式。但是,如果你使用HTTPS,前者不是这样,所以(而不是使用自定义验证器)你可以使用matches约束,它采用正则表达式(未经测试):

class User {
    String username
    String password

    static constraints = {
        username blank: false // whatever
        password minLenght: 8, matches: /^[\d\p{L}]*$/  // Digits or any kind of letter
    }
}

无论如何,我要做的是用JavaScript验证密码客户端,当它正确计算诸如SHA-1之类的散列并将其发送到服务器时。在这种情况下,您需要检查服务器端的所有内容是哈希符合SHA-1字符串,这很容易完成:

    static constraints = {
        // ...
        passwordHash matches: /^\b[0-9a-f]{5,40}\b$/
    }

因此,当用户尝试登录时,您应该检查存储和发送的哈希值,而不是使用普通密码。