我敢肯定,这已被问过,但我找不到任何答案这个问题。春季安全与休眠,存储加密密码
使用Spring-security,我使用的是密码编码器。
<beans:bean class="org.springframework.security.authentication.encoding.ShaPasswordEncoder" id="passwordEncoder"/>
<authentication-manager>
<authentication-provider user-service-ref='CustomUserDetailsService'>
<password-encoder ref="passwordEncoder"/>
</authentication-provider>
</authentication-manager>
在我的一个UserDAOImpl我已经添加用户时,下面的代码...
@Override
public void addUser(final User user) {
user.setPassword(passwordEncoder.encodePassword(user.getPassword(), "salt"));
sessionFactory.getCurrentSession().save(user);
}
我的密码被正确编码,但总是被解读为无效,这有点有意义的,因为我不不知道Spring会如何知道我的盐是“盐” - 你如何告诉春季安全以及Hibernate使用相同的盐?我是否缺少有关spring security如何管理密码的内容?
这些天推荐的选项是使用[BCrypt](http://stackoverflow.com/a/8528804/241990)。只需在你的Hibernate DAO中注入一个'BCryptPasswordEncoder'(或者在内部实例化一个),使用它来创建哈希并使用相同的bean进行验证。盐将自动处理。 – 2012-07-07 17:09:18
@LukeTaylor:谢谢你提供的信息。 TODO:建议在文档中:-) – 2012-07-07 17:21:06