3 回答
TA贡献1871条经验 获得超13个赞
如果您自己选择一个哈希系统,而不是使用已经包含哈希密码的现有数据库来构建应用程序,则应确保哈希算法也使用了盐。不要只使用简单的摘要。
bcrypt是一个不错的选择,现在我们可以通过BCryptPasswordEncoder(使用jBCrypt实现)在Spring Security 3.1中直接支持bcrypt 。这会自动生成一个盐,并将其与哈希值在单个String中连接。
一些数据库内置了对哈希的支持(例如Postgres)。否则,您需要先对密码进行哈希处理,然后再将其传递给JDBC:
String password = "plaintextPassword";
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String hashedPassword = passwordEncoder.encode(password);
创建用户时,只需要做这些即可对密码进行编码。
对于身份验证,您将使用类似以下的内容:
<bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
<bean id="authProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="yourJdbcUserService" />
<property name="passwordEncoder" ref="encoder" />
</bean>
TA贡献1797条经验 获得超4个赞
您可以通过简单的方式在applicationContext-security.xml中执行类似操作
<authentication-manager alias="authenticationManager">
<authentication-provider>
<password-encoder ref="encoder"/>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="
select username,password, enabled
from principal where username=?"
authorities-by-username-query="
select p.username, a.authority from principal p, authority a
where p.id = a.principal_id and p.username=?"
/>
</authentication-provider>
</authentication-manager>
<beans:bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
在Java中
public static String encodePasswordWithBCrypt(String plainPassword){
return new BCryptPasswordEncoder().encode(plainPassword);
}
然后测试
System.out.println(encodePasswordWithBCrypt("fsdfd"));
- 3 回答
- 0 关注
- 733 浏览
添加回答
举报