ReflectionSaltSource
работает только с объектом UserDetails
(я предполагаю, что именно здесь вы получаете исключение приведения класса?), Поэтому вам придется либо реализовать UserDetails
, либо создать собственную реализацию SaltSource
, котораяработает с вашим объектом.
Однако я бы не использовал свойство пользователя в качестве соли, если вы не работаете с устаревшей системой, которая уже делает это.Имя пользователя не очень хорошее солт-значение.Гораздо лучше использовать случайную соль, которая хранится с паролем.Хорошим примером является алгоритм BCrypt.См. Мой ответ на этот вопрос для примера использования его с Spring Security 3.1.Как объяснялось здесь, BCrypt автоматически генерирует случайную соль, которую он хранит в той же строке, что и хешированный пароль.
Обратите внимание, что в Spring Security 3.1 фактически существует новый интерфейс PasswordEncoder
"крипто" пакет (в org.springframework.security.crypto.password
).Сюда не входит соль в API-методах , поскольку предполагается, что соль генерируется внутренне (как в реализации BCrypt).Фреймворк, как правило, принимает один из этих или устаревших org.springframework.security.authentication.encoding.PasswordEncoder
.