2

我想在我的 Grails 应用程序和 Spring Security 中使用 MongoDB。我使用命令生成了 User 和 Role 类s2-quickstart。正如许多博客文章中所说,id我为我的所有类型类添加了一个属性。ObjectId

它确实有效,但一种方法让我有点困扰:

    // SecUser.groovy (generated by s2-quickstart)
def beforeUpdate() {
    if (this.isDirty('password')) {
        encodePassword()
    }
}

该方法isDirty()在 MongoDB 环境中似乎不可用。使用 Hibernate 可以正常工作。这是在http://jira.grails.org/browse/GPMONGODB-114下提交的错误

有没有办法绕过这种方法?据我了解,它会检查密码是否被修改,然后再次对其进行编码。

难道不能手动做到这一点吗?例如,如果我有一个包含密码字段的用户个人资料页面,我只是在保存时再次对其进行编码?

我真的很想同时使用 Spring Security 和 MongoDB,我相信这种方法不会阻止我。;)

4

1 回答 1

1

我看不出为什么您不能创建自己的 UserDetailsS​​ervice 来从 Mongo 加载散列密码,然后在 AuthnitcationManager 中使用 PasswordEncoder。这将告诉 Spring 对用户输入的密码进行哈希处理,然后再将其与您从 mongo 检索到的值进行比较。

我无法评论 Grails 方面,但我们在 Mongo 中使用 Spring 安全性和散列密码。我们实际上有一个使用迭代哈希/盐的自定义密码编码器,所以我确定你想要的是可能的:)

于 2012-03-07T20:20:11.053 回答