как получить / установить соль для JdbcRealm - PullRequest
3 голосов
/ 13 февраля 2012

Я пытаюсь использовать Shiro JdbcRealm и SHA256 hashedcredentialsMatcher.Мне нужно обновить устаревшую базу данных и назначить соответствующую соль для каждого пользователя (через пакетную процедуру).

как мне получить / установить соль для данного аккаунта с использованием фреймворка Shiro?

Ответы [ 2 ]

8 голосов
/ 20 мая 2014

С Shiro 1.2.3 все, что вам нужно сделать, это:

  1. Расширьте JdbcRealm и установите стиль соли.

    public class JdbcSaltRealm extends JdbcRealm {
        public JdbcSaltRealm() {
            setSaltStyle(SaltStyle.COLUMN);
        }
    }
    
  2. Обновление shiro.ini для использования расширенной области и получения столбца соли из DB

    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 & salt - текущие / новые пароли пользователей. Это должно быть сделано для всех существующих пользователей, а также для новых пользователей.

    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
    }
    

Надеюсь, мой ответ ясен и понятен.

1 голос
/ 25 апреля 2012

Возможно, немного поздно:

Взгляните на этот учебник .
Мери, парень, который владеет блогом, точно описывает, как создать собственную соленуюJDBC Realm .

Это также признанное улучшение в сообществе по сравнению с версией 1.3.0.

Надеюсь, это поможет, веселитесь!

...