【发布时间】:2012-03-05 05:02:37
【问题描述】:
我正在尝试使用 Shiro JdbcRealm 和 SHA256 hashedcredentialsMatcher。我需要更新旧数据库并为每个用户分配适当的盐(通过批处理例程)。
如何使用 Shiro 框架获取/设置给定帐户的 salt?
【问题讨论】:
我正在尝试使用 Shiro JdbcRealm 和 SHA256 hashedcredentialsMatcher。我需要更新旧数据库并为每个用户分配适当的盐(通过批处理例程)。
如何使用 Shiro 框架获取/设置给定帐户的 salt?
【问题讨论】:
可能有点晚了:
看看这个tutorial。
拥有该博客的 Meri 准确地描述了如何创建自己的salted JDBC Realm。
这也是社区中公认的improvement 1.3.0 版。
希望这会有所帮助,玩得开心!
【讨论】:
使用 Shiro 1.2.3,您只需:
扩展 JdbcRealm 并设置 salt 样式。
public class JdbcSaltRealm extends JdbcRealm {
public JdbcSaltRealm() {
setSaltStyle(SaltStyle.COLUMN);
}
}
更新shiro.ini以使用扩展领域并从数据库中获取盐列
credentialsMatcher = org.apache.shiro.authc.credential.HashedCredentialsMatcher
credentialsMatcher.hashAlgorithmName = SHA-256
jdbcRealm = com.mypackage.JdbcSaltRealm
jdbcRealm.authenticationQuery = SELECT password, salt FROM user WHERE username = ?
jdbcRealm.credentialsMatcher = $credentialsMatcher
哈希和加盐当前/新用户密码。这应该对所有现有用户以及新用户注册进行。
private void saltHashPassword(String password) {
String salt = new BigInteger(250, new SecureRandom()).toString(32);
//TODO: save salt value to "salt" column in user table
Sha256Hash hash = new Sha256Hash(password,
(new SimpleByteSource(salt)).getBytes());
String saltedHashedPassword = hash.toHex();
//TODO: save saltedHashedPassword value to "password" column in user table
}
希望我的回答清晰易懂。
【讨论】: