我最近开始尝试将这个应用程序从Grails 256更新到Grails 4.0.12。我对Grails和编程都很陌生,所以已经3周了,几百次尝试都没有成功。除了密码散列之外,一切似乎都很好。由于密码是使用SHA 256散列的,用户无法登录。我“我尝试了各种互联网上的实现,但遗憾的是没有一个能成功,所以stackoverflow是我最后的尝试。然而,仅仅是为了上下文,在任何人想知道的情况下都不会抛出错误;但同时,如果你要求任何例外,你可能不知道如何解决它:(.嗯,感谢任何人有任何提示。
我试过创建一个Sha 256到BCrypt编码器,如Burt Beckwith here所述,但没有成功。这种方法似乎不适合我的情况。
1条答案
按热度按时间soat7uwm1#
对于那些可能遇到这个问题的人,我写了一个非常有趣的方法。
Grails 4提供了一个特性,允许自定义编码器(codec)实现,只要类位于utils文件夹下,并且类名应该以Codec结尾,即class MyEncoderCodec。阅读更多关于here的信息。因此,对于使用SHA-256(迭代一次)的用户,解决方案如下:
1.创建编码器
1.创建一个控制器方法来处理转换。
1.使用 AJAX 在表单提交前进行转换;你可以使用拦截器,但我认为 AJAX 调用更干净,你可以避免重写和依赖注入。我是编程新手,所以我知道这个javascript代码可以改进。还要注意,在我的例子中,#login-button是提交表单的提交按钮;处理回车键。
1.老实说,我不是100%肯定,我现在懒得检查,但我几乎可以肯定,在Grails 4中,当你创建一个项目时,Grails会自动创建一个PasswordEncoderListener。
如您所见,我没有使用编码器来验证用户,只是检查匹配,然后我只是更新数据库中的用户密码,并让spring security处理编码。