Подтвердить что ты не робот

Как обрабатывать вход в форму с помощью Spring Безопасность /Spring MVC

Простой вопрос, мне нужен указатель в правильном направлении:

У меня есть простой Spring MVC/Spring Security webapp. Первоначально я настроил Spring Безопасность, чтобы страница входа в систему по умолчанию показывала и аутентифицировала правильно (я выполнил UserDetailsService с помощью DaoAuthenticationProvider).

Следующий шаг: замените страницу входа в систему по умолчанию Spring на мою страницу входа и отправьте учетные данные.

Но что мне делать с предоставленными учетными данными для входа? Предполагаю, что я отправляю форму контроллеру, проверяю учетные данные, но я не понимаю, что после этого правильный шаг. Например:.

  • Я вызываю метод AuthenticationManager?
  • Нужно ли мне определять bean для этого?
  • Есть ли интерфейс/служба, которую мне нужно реализовать, например, AuthenticationEntryPoint или что-то в этом роде?

Я ударил документы 3 раза и не совсем следую им. Я знаю, что это просто грязь, поэтому мне просто нужно услышать, как должен протекать процесс.

4b9b3361

Ответ 1

Spring Безопасность справочная документация описывает основной поток обработки в 5.4 Аутентификация в веб-приложении. Есть пункт № 6:

Далее сервер решит, действительны ли представленные учетные данные. Если они действительны, произойдет следующий шаг. Если они недействительны, обычно вашему браузеру будет предложено повторить попытку (чтобы вы вернулись к шагу 2 выше).

...

Spring Безопасность имеет различные классы, отвечающие за большинство шагов, описанных выше. Основными участниками (в том порядке, в котором они используются) являются ExceptionTranslationFilter, AuthenticationEntryPoint и механизм проверки подлинности ", который отвечает за вызов AuthenticationManager, который мы видели в предыдущем разделе.

Я должен признать, что документация здесь немного запутанна, поэтому я дам вам еще несколько указателей. "Механизм проверки подлинности ", упомянутый здесь, - это то, что вам нужно, оно отвечает за обработку учетные данные, которые отправляет браузер.

Поскольку сведения о прикреплении учетных данных к HTTP-запросу сильно различаются между различными методами проверки подлинности (данные формы против обычных заголовков или заголовков дайджеста), нет обычного механизма проверки подлинности - вместо этого каждый метод реализует свой собственный механизм, а в случае проверки подлинности в Интернете обычно это специальный фильтр, который вы должны настроить в web.xml.

В вашем случае вас, скорее всего, интересует UsernamePasswordAuthenticationFilter - это используется для обработки базовой информации о регистрации на основе формы. Контракт между вашей пользовательской формой входа и фильтром - это URL-адрес (где размещена форма) + имена имен пользователей и паролей:

Форма входа в систему просто содержит поля ввода j_username и j_password и сообщения в URL-адрес, который отслеживается фильтром (по умолчанию это/j_spring_security_check).

Ответ 2

Я добавлю поясняющий ответ для тех, кто читает это в будущем:

Когда вы определяете тег в spring безопасности, он будет обрабатывать логин для вас, я расскажу о том, как он работает подробно (желательно, чтобы это было подробно описано в документах):

<security:http auto-config="true">
    <security:form-login login-page="/login"
         login-processing-url="/postlogin"
         default-target-url="/myaccount"
         authentication-failure-url="/login?loginError=true" />
    <security:logout logout-url="/logout" />
</security:http>

страница входа - это URL-адрес страницы входа. У вас должен быть контроллер (или статическая HTML-страница), который обслуживает эту страницу, это ваша красивая форма входа.

login-processing-url - это URL-адрес, который обрабатывает компонент формы-входа. Как будто компонент form-login реализовал собственный контроллер для этой страницы. Вы должны опубликовать свою форму на этой странице. Вы также должны знать, чтобы назвать ваши параметры имени пользователя/пароля "j_username" и "j_login"

Помимо этого и остальных достаточно очевидных опций выше, вы должны были реализовать UserDetailsService, то есть создать класс, реализовать интерфейс UserDetailsService, который получает и возвращает объект UserDetails (< имя пользователя/пароль) для данного имени пользователя - и при условии, что с остальной конфигурацией безопасности:

<security:authentication-manager>
        <security:authentication-provider ref="daoAuthenticationProvider" />
</security:authentication-manager>

<bean id="daoAuthenticationProvider"
    class="org.springframework.security.authentication.dao.DaoAuthenticationProvider" >
    <property name="userDetailsService" ref="myAuthorizationService" />
</bean>

Ответ 3

Мы говорим об одной и той же проблеме все больше и меньше, это мой подход. Посмотрите, что скажут люди.

Ответ 4

См. публикацию limc в ответ на Ritesh ответ на Конфигурирование Spring Security 3.x, чтобы иметь несколько точек входа Посмотрите на разделы под заголовком:

ОБНОВЛЕНИЕ 01-29-2011 - техника @Ritesh
ОБНОВЛЕНИЕ - РЕШЕНИЕ к методу @Ritesh

Это краткий, продвинутый хороший пример того, как вы можете настроить процесс входа в систему Spring Безопасность

Ответ 5

Если вы используете доступную базу данных JDBC, вы можете использовать следующий поставщик аутентификации и не создавать собственный. Он сокращает код, необходимый для 9 строк XML:

<authentication-provider>
    <jdbc-user-service data-source-ref="dataSource" users-by-username-query="select username,password from users where username=?" authorities-by-username-query="select u.username, r.authority from users u, roles r where u.userid = r.userid and u.username =?" />
</authentication-provider>

Затем вы можете настроить свой источник данных следующим образом

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/DB_NAME" />
    <property name="username" value="root" />
    <property name="password" value="password" />
</bean>

Взгляните на этот пост: http://codehustler.org/blog/spring-security-tutorial-form-login/ Он охватывает все, что вам нужно знать о настройке Spring Security form-login.

Ответ 6

<security:http auto-config="true">
  <security:form-login login-page="/login"
   login-processing-url="/postlogin"
    default-target-url="/myaccount"
     authentication-failure-url="/login?loginError=true" />
  <security:logout logout-url="/logout" />
</security:http>

login-page - это URL-адрес формы входа в систему login-processing-url - это URL-адрес, на который отправляется форма входа. Spring предоставит вам самостоятельный вызов менеджера проверки подлинности, отображаемого вами в файле security.xml.

Процесс

  • Вам нужно написать класс, который реализует org.springframework.security.authentication.AuthenticationProvider с использованием метода overriden Аутентификация подлинности (аутентификация аутентификации)
  • Второй класс, который расширяет org.springframework.security.core.userdetails.UserDetailsService с переопределенным методом loadUserByUsername (имя пользователя String)
  • Форма второго класса, где вы можете позвонить в DAO и проверить пользователя с базой данных, извлекающей имя пользователя и пароль.
  • В аутентификации аутентификации (аутентификация аутентификации) вы сравните пароль и верните неудачу успеха, если вы закончили.