如何获取/设置JdbcRealm的salt

时间:2012-02-13 19:19:08

标签: java shiro salt jdbcrealm

我正在尝试使用Shiro JdbcRealm和SHA256 hashedcredentialsMatcher。我需要更新遗留数据库并为每个用户分配适当的盐(通过批处理例程)。

如何使用Shiro框架获取/设置给定帐户的盐?

2 个答案:

答案 0 :(得分:8)

使用Shiro 1.2.3,您需要做的就是:

  1. 扩展JdbcRealm 并设置盐样式。

    public class JdbcSaltRealm extends JdbcRealm {
        public JdbcSaltRealm() {
            setSaltStyle(SaltStyle.COLUMN);
        }
    }
    
  2. 更新shiro.ini 以使用扩展领域并从DB获取salt列

    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
    
  3. Hash&盐流/新用户密码。这应该对所有现有用户以及新用户注册完成。

    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
    }
    
  4. 我希望我的答案清晰易懂。

答案 1 :(得分:1)

也许有点晚了:

看看这个tutorial Meri,拥有该博客的人,详细描述了如何创建自己的 salted JDBC Realm

对于版本1.3.0,这也是社区中公认的improvement

希望有这种帮助,玩得开心!