Grails和Spring安全性:与Crypto模块PasswordEncoder一起使用时,Salt值必须为空

时间:2014-01-12 21:55:24

标签: grails spring-security

我几乎完成了Grails 2.2.1升级到2.3.4和Spring Security Plugin 1.2.7.3到2.0 RC2的升级。我运行了应用程序,但是当我尝试登录时,我得到了一个:

java.lang.IllegalArgumentException: Salt value must be null when used with crypto module PasswordEncoder

我无法解决这个问题,而且我没有找到任何与grails或spring安全插件相关的错误的有用提示......

我在本博客文章中列出了自定义UserDetailsS​​ervice的盐设置:   http://grailsplayground.blogspot.com/2011/10/setting-up-grails-web-application-using.html

我不知道我是否需要以不同方式处理盐(如果新插件有更好的方法)或者我只需要改变一些小的东西(就像我必须通过升级过程那样做)将grails.plugins.springsecurity更改为grails.plugin.springsecurity)

log4j输出(尝试进行身份验证):

    web.FilterChainProxy  - /j_spring_security_check at position 3 of 8 in additional filter chain; firing Filter: 'RequestHolderAuthenticationFilter'authentication.ProviderManager  - Authentication attempt using org.springframework.security.authentication.dao.DaoAuthenticationProvider
    dao.DaoAuthenticationProvider  - Authentication failed: password does not match stored value
    rememberme.TokenBasedRememberMeServices  - Interactive login attempt was unsuccessful.
    rememberme.TokenBasedRememberMeServices  - Cancelling cookie

1 个答案:

答案 0 :(得分:3)

2.0中的默认算法是bcrypt,它不支持提供的salt,因为它在内部使用它自己的。因此,取消配置任何与盐相关的设置(例如dao.reflectionSaltSourceProperty属性或自定义saltSource bean)并使用默认值,或使用password.algorithm属性覆盖默认值(例如使用SHA-256)并配置盐设置。