#spring #authentication #spring-security #spring-roo
#spring #проверка подлинности #spring-безопасность #spring-roo
Вопрос:
Я разрабатываю приложение с Spring roo. В качестве первого теста аутентификации, подразумевающего Spring security, я использовал аутентификацию для таблицы в моей базе данных. Это работает нормально :
<authentication-manager alias="authenticationManager">
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource" authorities-by-username-query="select username,authority from users where username=?"/>
</authentication-provider>
</authentication-manager>
Теперь все становится немного сложнее (для меня), поскольку пароль в «реальной» (в рабочей среде env) таблице пользователей зашифрован, я должен сначала использовать хэш-функцию md5, а затем кодировку base64, а также iso для обработки специальных символов.
Я должен создать пользовательский jdbc-user-service. Каковы были бы наилучшие методы для решения этих операций?
Комментарии:
1. Вы рассмотрели существующую функциональность кодировщика паролей, которая поставляется с Spring Security?
2. ДА. Это очень хорошо, но, к сожалению, метод кодирования, используемый для существующего имени пользователя и пароля, является своего рода экзотическим, и я должен его создать…
3. Хорошо, я понимаю это, но если вы посмотрите на существующие реализации, у вас должно быть несколько хороших указаний о том, как это реализовать. Я не понимаю, зачем вам нужна пользовательская служба JDBC user service, реализация кодировщика паролей, подключенная к вашей службе сведений о пользователе, должна работать нормально.
4. Наверное, мне трудно понять, в чем заключается ваш вопрос — вы хотите знать, как создать пользовательский кодировщик паролей или как подключить его к стандартной пользовательской службе JDBC, или и то, и другое?
5. На самом деле мне понадобились бы оба. Вы правы, мои вопросы неточны, потому что я не совсем понимаю spring security. Я нашел несколько хороших ресурсов по тегу password-encoder (используя ссылку на компонент), но я не понимаю, как я могу создать кодировщик паролей, как я могу использовать различные методы.
Ответ №1:
Как и предлагалось, мне удалось решить проблему с помощью Spring security build в аутентификации.
Сначала мне нужно было установить кодировку security-context.xml соответствует стандарту ISO-8859-1
<?xml version="1.0" encoding="ISO-8859-1"?>
затем используйте :
<password-encoder hash="md5" base64="true" ></password-encoder>
Ответ №2:
Первое, что нужно сделать, это создать пользовательский кодировщик паролей, который позволит мне лучше контролировать процесс аутентификации.
-
В applicationContext-Security.xml
-
Создайте пользовательский класс
открытый класс SnatiPasswordEncoder реализует PasswordEncoder {
@Override public String encodePassword(String arg0, Object arg1) throws DataAccessException { // TODO Auto-generated method stub return null; } @Override public boolean isPasswordValid(String arg0, String arg1, Object arg2) throws DataAccessException { // TODO Auto-generated method stub return false; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub }
}
Что должно быть дальше ?