2015-10-19 117 views
1

在插入數據庫之前,我使用Spring StandardPasswordEncoder對密碼進行編碼。但是當試圖用相同的密碼登錄時,我得到一個無效的密碼錯誤。不知道什麼是錯的。以下是代碼。在春季使用密碼編碼時用戶登錄失敗

安全配置:

<security:authentication-manager id="authMgr"> 
    <security:authentication-provider> 
     <security:jdbc-user-service 
      data-source-ref="dataSource" /> 
     <security:password-encoder ref="passwordEncoder"></security:password-encoder> 
    </security:authentication-provider> 
</security:authentication-manager> 
<bean id="passwordEncoder class="org.springframework.security.crypto.password.StandardPasswordEncoder"> 
</bean> 

服務層(將數據傳遞到數據訪問層之前密碼編碼)

import org.springframework.security.crypto.password.PasswordEncoder; 

@Autowired 
private PasswordEncoder passwordEncoder; 

user.setPassword(passwordEncoder.encode(newAccountDetails.getPassword())); 
userDataAccess.createUser(user); 

回答

1

相信建議How to use new PasswordEncoder from Spring Security適用。看到接受的答案有一個很好的解釋。

我修改建議的代碼的答案之一以下,以更好地適應當前設置:

<security:authentication-manager id="authMgr"> 
    <security:authentication-provider> 
     <security:jdbc-user-service data-source-ref="dataSource" /> 
     <security:password-encoder ref="passwordEncoder"></security:password-encoder> 
    </security:authentication-provider> 
</security:authentication-manager> 

<bean id="passwordEncoder class="org.springframework.security.crypto.password.org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"> 
</bean>