在Spring中使用密码编码时,用户登录失败

时间:2015-10-19 17:16:43

标签: java spring-mvc spring-security password-encryption

我在插入数据库之前使用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);

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

尽管我在身份验证提供程序上设置了“按用户名查询”权限,但我遇到了同样的问题。 即使我具有正确的安全性配置,当用户在我的数据库中没有权限时,身份验证也会失败,并使用无效的用户名/密码。错误消息具有误导性。