我在嘗試匹配使用spring-security-core:2.0-RC4
和Grails 2.3.3
的用戶的密碼時遇到問題。沒有方法的簽名BCryptPasswordEncoder.matches()適用於參數類型:(java.lang.String,java.lang.String)
做passwordEncoder.matches(rawPassword, encodedPassword)
No signature of method grails.plugin.springsecurity.authentication.encoding.BCryptPasswordEncoder.matches() is applicable for argument types: (java.lang.String, java.lang.String)
當我檢查了BCryptPasswordEncoder source來尋找線索,在PasswordEncoder class definition結束了,我發現了以下錯誤。
BCryptPasswordEncoder中的導入看起來不正確,因爲新的PasswordEncoder在org.springframework.security.crypto.password
中。
做passwordEncoder.isPasswordValid(rawPassword, encodedPassword, null)
工程(如在,沒有錯誤),但我不知道如何得到鹽。
這工作正常嗎?如果是這樣,我該如何獲得鹽?
編輯: 我試着用NullSaltSource
太多,但它給我的錯誤:
Salt value must be null when used with crypto module PasswordEncoder
顯然我不認爲我有任何問題。我所需要做的就是將編碼與原始密碼交換,如下所示: passwordEncoder.isPasswordValid(encodedPassword,rawPassword,null)起作用。 – dosaki 2014-11-07 12:50:28
下一個代碼片段出現在文檔中:if(!passwordEncoder.isPasswordValid(user.password,password,null/* salt * /)){flash.message ='當前密碼不正確' render view:'passwordExpired' ,model:[username:session ['SPRING_SECURITY_LAST_USERNAME']] return } – 2016-03-29 14:54:15