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