如何使用 Spring Security 3 对密码进行哈希处理和加盐?
问问题
18572 次
3 回答
21
以编程方式,您可以按如下方式进行:
在您的 application-context.xml(在 web.xml 下contextConfigLocation
定义)文件中定义 bean(本示例使用md5
)。
<bean class="org.springframework.security.authentication.encoding.Md5PasswordEncoder" id="passwordEncoder" />
然后自动装配密码编码器:
@Autowired
PasswordEncoder passwordEncoder;
在你的方法或任何你想要散列和加盐的地方。
passwordEncoder.encodePassword("MyPasswordAsString", "mySaltAsStringOrObject");
上面的调用应该返回一个加盐的哈希(作为一个String
)。
那应该这样做。我假设你能找出你需要的罐子。
更新
不用说,使用 MD5 并不是最好的主意。理想情况下,您至少应该使用 SHA-256。这可以通过ShaPasswordEncoder
.
将上面的 MD5 bean 配置替换为:
<bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.ShaPasswordEncoder">
<constructor-arg value="256"/>
</bean>
于 2011-09-11T17:52:57.103 回答
8
最简单的似乎是 Spring Security 3.1,假设对应该进行散列的方式没有限制:
<bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
<security:authentication-manager>
<security:authentication-provider>
<security:password-encoder ref="encoder"/>
<security:jdbc-user-service data-source-ref="dataSource" users-by-username-query="select username,password, enabled from users where username=?" authorities-by-username-query="select u.username, ur.authority from users u, user_roles ur where u.username = ur.username and u.username =?"/>
</security:authentication-provider>
</security:authentication-manager>
@Controller
@Stateless
public class UsersEJB {
@PersistenceContext(unitName = "somePU")
private EntityManager em;
@Transactional
public void create(Users users) {
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String hashedPassword = passwordEncoder.encode(users.getPassword());
users.setPassword(hashedPassword);
em.persist(users);
}
}
于 2013-03-21T17:17:57.283 回答
6
最简单的方法,如记录:
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="userDetailsService" >
<password-encoder hash="sha">
<salt-source user-property="username"/>
</password-encoder>
</authentication-provider>
</authentication-manager>
高温高压
于 2012-08-14T13:52:31.987 回答