2012-02-13 3 views
2

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

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

ответ

1

Может быть, немного поздно:

Посмотрите на эту tutorial.
Meri, парень, который владеет блогом, описывает, как создать собственный соленый JDBC Realm.

Это также подтвержденный improvement в сообществе для версии 1.3.0.

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

6

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

  1. Продлить JdbcRealm и установить соль стиль.

    public class JdbcSaltRealm extends JdbcRealm { 
        public JdbcSaltRealm() { 
         setSaltStyle(SaltStyle.COLUMN); 
        } 
    }
  2. Update 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
  1. 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 
    
    }

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

+0

Это работает очень хорошо. Спасибо. –

Смежные вопросы