我想在我的Grails应用程序中使用MongoDB,还想在Spring Security中使用MongoDB。我使用s2-quickstart
命令生成了User和Role类。我在ObjectId
类型的所有课程中添加了id
属性,正如许多博客文章中所述。与MongoDB一起使用Spring Security
它的工作,但一个方法困扰我一点点:
// 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,我相信这种方法不会阻止我。 ;)
什么是UserDetailsService?我在GitHub的一个示例应用程序中看到了这个类,但它没有生成。这只是一件好事吗?我目前没有看到使用它的好处。我只是扔掉'... before()'方法之后,创建一个新的'User'对象,并且手动设置腌制/散列密码,而不是'User'对象本身。奇迹般有效。我想很多事情都是由Grails插件或Spring Security自动完成的,不需要明确配置。 – 2012-03-07 22:22:35
最后标记你的答案是正确的,因为在每次保存或更新用户时实施密码散列是使用Grails和MongoDB的唯一方法,因为'isDirty()'仅在Hibernate中受支持。虽然伤害不大 – 2012-03-19 21:21:32