Korzystanie z narzędzia PasswordMatcher Shiro z niestandardową dziedziną

Używam Apache Shiro z niestandardową dziedziną JDBC do pobierania soli użytkownika, hasła, nazwy algorytmu mieszania i liczby iteracji mieszania z bazy danych, które są przechowywane jako osobne kolumny.

Problem polega na tym, że nie jestem pewien, w jaki sposób powinienem obsługiwać sól pobraną z bazy danych podczas używania PasswordMatchera do sprawdzenia, czy hasło użytkownika pasuje do hasła zapisanego w bazie danych.

Podczas używania HashedCredentialsMatcher sól jest ustawiana za pomocąsetCredentialsSalt metoda, jednak wydaje się, że nie jest tak w przypadku korzystania z PasswordMatcher zamiast HashedCredentialsMatcher.

Kod, którego używam w niestandardowej dziedzinie JDBC, jest następujący

@Override 
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { 

        //code to retrieve user details from database removed for brevity 

        SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(username, passwdSalt.password, getName()); 
        info.setCredentialsSalt(new SimpleByteSource(passwdSalt.salt)); 

        DefaultPasswordService passwordService = new DefaultPasswordService(); 
        DefaultHashService hashService = new DefaultHashService(); 
        PasswordMatcher passwordMatcher = new PasswordMatcher(); 

        hashService.setHashAlgorithmName(passwdSalt.hashAlgorithmName); 
        hashService.setHashIterations(passwdSalt.hashIterations); 
        passwordService.setHashService(hashService); 
        passwordMatcher.setPasswordService(passwordService); 
        setCredentialsMatcher(passwordMatcher); 

        return info; 
} 

Po przejściu przez kod potwierdziłem, że problem jest zdecydowanie spowodowany nie używaniem soli podczas mieszania hasła wprowadzonego przez użytkownika w celu dopasowania go do hashowanego hasła w bazie danych. W DefaultPasswordService.java, gdy metoda passwordsMatch (Obiekt przedstawionyPlaintext, String saved) jest wywoływana w linii 160 obiekt o nazwierequest zawiera następujące elementy

algorithmName=null 
iterations=0 
salt=null 
source=cGFzc3dvcmQ= 

Następna linia kodu w linii 161 wywołujecomputeHash(request)

W DefaultHashService.java, gdy metodacomputeHash(HashRequest request) jest wywoływana, w liniach 155 i 157 zmienne algorytmName i iteracje są poprawnie ustawione naSHA-256 i1 odpowiednio. W linii 159 metodagetPublicSalt(request) jest nazywane, jakkolwiek powraca.

Czy ktoś inny użył Shiro's PasswordMatcher z niestandardową dziedziną i jeśli powiesz Shiro, żeby użył soli?

questionAnswers(3)

yourAnswerToTheQuestion