Форма и основные параметры входа
Вам может быть интересно, откуда взялась форма входа, когда вам предложили войти в систему, поскольку мы не упомянули ни HTML-файлы, ни JSP. Фактически, поскольку мы не указали явно URL-адрес для страницы входа в систему, Spring Security генерирует его автоматически на основе включенных функций и использования стандартных значений для URL-адреса, который обрабатывает отправленное имя входа, целевой URL-адрес по умолчанию, который будет использовать пользователь. быть отправлено после входа в систему и так далее. Тем не менее, пространство имен предлагает много поддержки, чтобы позволить вам настроить эти параметры. Например, если вы хотите указать собственную страницу входа, вы можете использовать:
<http>
<intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login login-page='/login.jsp'/>
</http>
Также обратите внимание, что мы добавили дополнительный элемент intercept-url , чтобы сообщить, что любые запросы на страницу входа должны быть доступны для анонимных пользователей [3], а также класс AuthenticatedVoter для получения более подробной информации о том, как значение IS_AUTHENTICATED_ANONYMOUSLY обрабатывается.]. В противном случае запрос будет соответствовать шаблону / **, и сам доступ к странице входа в систему будет невозможен! Это распространенная ошибка конфигурации, которая приводит к бесконечному циклу в приложении. Spring Security выдаст предупреждение в журнале, если ваша страница входа будет защищена. Также можно сделать так, чтобы все запросы, соответствующие конкретному шаблону, полностью обходили цепочку фильтров безопасности, определяя отдельный элемент http для шаблона следующим образом:
<http pattern="/css/**" security="none"/>
<http pattern="/login.jsp*" security="none"/>
<http use-expressions="false">
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login login-page='/login.jsp'/>
</http>
В Spring Security 3.1 теперь можно использовать несколько элементов http для определения отдельных конфигураций цепочки фильтров безопасности для разных шаблонов запросов. Если атрибут pattern отсутствует в элементе http, он соответствует всем запросам. Создание незащищенного шаблона - простой пример этого синтаксиса, где шаблон отображается в пустую цепочку фильтров [4]. Мы рассмотрим этот новый синтаксис более подробно в главе о цепочке фильтров безопасности.
Важно понимать, что эти незащищенные запросы будут полностью игнорировать любую веб-конфигурацию Spring Security или дополнительные атрибуты, такие как require-channel, поэтому вы не сможете получить доступ к информации о текущем пользователе или вызвать защищенные методы во время запрос. Используйте access = 'IS_AUTHENTICATED_ANONYMOUSLY' в качестве альтернативы, если вы все еще хотите применить цепочку фильтров безопасности.
Если вы хотите использовать обычную аутентификацию вместо формы входа, измените конфигурацию на
<http use-expressions="false">
<intercept-url pattern="/**" access="ROLE_USER" />
<http-basic />
</http>
Обычная аутентификация будет иметь приоритет и будет использоваться для запроса входа в систему, когда пользователь пытается получить доступ к защищенному ресурсу. Форма входа по-прежнему доступна в этой конфигурации, если вы хотите использовать ее, например, через форму входа, встроенную в другую веб-страницу.
Установка пункта назначения после входа в систему по умолчанию
Если при входе в форму не запрашивается попытка доступа к защищенному ресурсу, в игру вступает опция default-target-url . Это URL-адрес, по которому пользователь будет принят после успешного входа в систему, и по умолчанию используется значение «/». Вы также можете настроить все так, чтобы пользователь всегда попадал на эту страницу (независимо от того, был ли вход в систему «по требованию» или он явно выбрал вход в систему), установив атрибут Always-use-default-target в «true» , Это полезно, если ваше приложение всегда требует, чтобы пользователь запускал «домашнюю» страницу, например:
<http pattern="/login.htm*" security="none"/>
<http use-expressions="false">
<intercept-url pattern='/**' access='ROLE_USER' />
<form-login login-page='/login.htm' default-target-url='/home.htm'
always-use-default-target='true' />
</http>
Для еще большего контроля над пунктом назначения вы можете использовать атрибут authentication-success-handler-ref в качестве альтернативы default-target-url . Указанный компонент должен быть экземпляром AuthenticationSuccessHandler. Подробнее об этом вы узнаете в главе «Основные фильтры», а также в приложении к пространству имен, а также о том, как настроить поток в случае сбоя аутентификации.
Справочные документы Spring Security