Использование PasswordMatcher Широ с пользовательским царством

использую Apache Shiro с пользовательской областью JDBC для извлечения пользователяs соль, пароль, имя алгоритма хеширования и количество итераций хеша из базы данных, которые хранятся в виде отдельных столбцов.

Проблема в том, что яя не уверен, как мне поступить с солью, полученной из базы данных, при использовании PasswordMatcher для проверки пользователя 'Пароль совпадает с тем, что хранится в базе данных.

При использовании HashedCredentialsMatcher соль устанавливается с помощьюsetCredentialsSalt метод, однако кажется, что это неt случай, когда используется PasswordMatcher вместо HashedCredentialsMatcher.

Код ям, используя в пользовательской области JDBC следующим образом

@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; 
} 

Пройдя через код, яМы подтвердили, что проблема определенно связана с тем, что соль не используется при хешировании пароля, введенного пользователем, чтобы сопоставить его с хешированным паролем в базе данных. В DefaultPasswordService.java при вызове метода passwordsMatch (Object submitPlaintext, String сохранено) в строке 160 объект с именемrequest содержит следующее

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

Следующая строка кода на строке 161 вызываетcomputeHash(request)

В DefaultHashService.java, когда методcomputeHash(HashRequest request) в строках 155 и 157 переменные имя_граммы и итерации правильно установленыSHA-256 а также1 соответственно. По строке 159 методgetPublicSalt(request) называется однако, он возвращает ноль.

Кто-нибудь еще использовал Широ?s PasswordMatcher с пользовательской областью, и если как вы скажете Широ использовать соль?

Ответы на вопрос(3)

Ваш ответ на вопрос