我几乎完成了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安全插件相关的错误的有用提示......
我在本博客文章中列出了自定义UserDetailsService的盐设置: 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
答案 0 :(得分:3)
2.0中的默认算法是bcrypt,它不支持提供的salt,因为它在内部使用它自己的。因此,取消配置任何与盐相关的设置(例如dao.reflectionSaltSourceProperty
属性或自定义saltSource
bean)并使用默认值,或使用password.algorithm
属性覆盖默认值(例如使用SHA-256)并配置盐设置。