我想在我的Grails应用程序和Spring Security中使用MongoDB。我使用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,我确信这种方法不会阻止我。 ;)
答案 0 :(得分:1)
我认为没有理由不能创建自己的UserDetailsService,它从Mongo加载散列密码,然后在AuthenitcationManager中使用PasswordEncoder。这将告诉Spring在将用户输入的密码与从mongo中检索到的值进行比较之前对用户输入的密码进行哈希处理。
我无法对Grails方面发表评论,但我们正在使用Spring安全性并使用Mongo散列密码。我们实际上有一个使用迭代哈希/盐的自定义密码编码器,所以我确定你想要的是什么:)