Spring Security DB Authentication с Hibernate и хэшированными паролями? - PullRequest
3 голосов
/ 28 апреля 2010

Я пытаюсь настроить Spring Security 3 для аутентификации пользователей по моей базе данных Hibernate 3. Я храню в базе данных только хэши паролей sha1 (не в открытом виде). ​​

Я смотрел на это и это , которые говорят мне о реализации моего собственного UserDetailsService. К сожалению, UserDetails, который выкладывает loadUserByUsername, похоже, нуждается в незашифрованном пароле, которого у меня нет.

Как это обычно обрабатывается? Может ли Spring Security действительно сделать то, что мне нужно здесь? Я что-то упустил?

Ответы [ 2 ]

3 голосов
/ 28 апреля 2010

Когда вы устанавливаете UserDetailsService, Spring использует его для загрузки пользователей, а затем сравнивает их с информацией для входа. Это означает, что он сравнивает пароли. Однако вы можете настроить кодировщик пароля: Doc: Добавление кодировщика пароля

или вы просто пишете свой AuthenticationManager или AuthenticationProvider , который загружает пользователя и решает, успешно ли он вошел в систему. Просто реализуйте интерфейсы AuthenticationProvider и настройка конфигурации

<authentication-manager>
  <authentication-provider ref="myAuthenticationProvider"/>
</authentication-manager>

<bean id="myAuthenticationProvider"
  class="stackoverflow.SuperduperMegaAuthenticationProvider">
</bean>
2 голосов
/ 28 апреля 2010

Обычно пользовательские детали содержат хешированный пароль, и вам просто нужно настроить Spring Security для использования правильного кодировщика пароля для аутентификации с ним.

 <password-encoder hash="md5"/>

Найдите приведенную выше строку кодировщика пароля в ответе «Переполнение стека» @ Аутентификация базы данных Spring Security 3 с помощью Hibernate .

В вашем случае вы должны заменить эту строку на:

<password-encoder hash="sha"/>
...