2012-05-16 1 views
2

Итак, я понимаю, что вы можете проверить пароль в Spring Security с солью на основе свойства userDetail и затем использовать его для сравнения с хэшем в базе данных, однако, что, если соль используется при создании каждого пользователь является случайным (и хранится в БД), мне нужно создать свой собственный класс userDetails, который содержит свойство salt, а затем установить, что, как используется защита весы поля, для использования в securityApplicationContext?Spring Security 3 + Random Salt

Если да, то как я могу написать свой собственный класс userDetails для этого? Извините, все еще довольно новый для Spring/Java.

+1

Ответ на ваш вопрос: «Да», если соль случайна, тогда вам нужно будет предоставить ее для проверки. Просто напишите класс 'userDetails', как и любой другой класс. –

+0

Хорошо, но тогда как я могу сказать securityApplicationContext использовать класс myCustomUserDetails для хранения пользователя вместо класса userDetails по умолчанию? – Felix

+0

Вам лучше использовать такой алгоритм, как Bcrypt, который включает случайную соль. Вы найдете такие вещи [уже обсуждались до] (http://stackoverflow.com/a/8662496/241990), если вы ищете здесь и в другом месте в Интернете. –

ответ

1

Хорошо, но тогда как я могу сказать securityApplicationContext использовать класс myCustomUserDetails для хранения пользователя вместо класса userDetails по умолчанию?

Как это:

<b:bean id="customUserDetailsService" class="com.your.company.security.MyUserDetailsService"/> 

<s:authentication-provider user-service-ref="customUserDetailsService" /> 

Это идет в вашем контексте безопасности.

Также это может помочь.

Writing a custom UserDetailsService.

+0

Ahh Я видел эту статью во время поиска в Google, но я думаю, что теперь я понимаю это лучше. Поэтому, чтобы убедиться, что я реализую свой собственный userDetailsService и в методе loadByUsername, я возвращаю объект userDetails, который является моей собственной реализацией userDetails, это правильно? – Felix

+0

Да. Точно, а затем вы вводите новый 'UserDetailsService'. – Simeon

+0

Хорошо, у меня есть CustomUserDetailsService и CustomUserDetails, однако, когда я пытаюсь войти в систему, он говорит, что комбинация имени пользователя и пароля неверна. Не уверен, как его отлаживать. Как SpringSecurity сравнивает введенный пароль с DB? У меня есть хэш соленого пароля как пароль, хранящийся в db. Должно ли это иметь отношение к типу переменной? Я получаю соль и хэш из БД как byte [], а в CustomUserDetails у меня есть: password = new String (myUser.getHash(), "UTF8"); соль = новая строка (myUser.getSalt(), "UTF8"); – Felix