Spring Security/Конфигурирование с помощью пространства имён: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 341:
 
== Добавление собственных фильтров ==
Если вы уже использовали Spring Security ранее, то вы знаете что фреймворк поддерживает цепочки фильтров, чтобы применять свои сервисы. Вы можете захотеть добавить в соответствующее место в стеке свой собственный фильтр или использовать Spring Security фильтр для которого пока еще нет конфигурационных опций в пространстве имен (например CAS). Или вы может быть захотите использовать собственную реализацию стандартного фильтра, конфигурируемого пространством имен, такого как <code>UsernamePasswordAuthenticationFilter</code>, который создается элементом <code><form-login></code>, но при этом воспользоваться преимуществами, которые даются при явном использовании бинов. Как это можно сделать в конфигурации пространства имен, где цепочки фильтров не представлены явно?
 
Порядок фильтров всегда жестко задан при использовании конфигурирования с помощью пространства имен. Когда создается контекст приложения, код отвечающий за обработку пространства имен выполняет сортировку бинов фильтров и для каждого стандартного фильтра Spring Security известен его псевдоним и место в цепочке.
 
<blockquote>'''''Примечание:'''''
В предыдущих версиях сортировка выполнялась после того как экземпляры фильтров уже были созданы, в фазе пост-процессинга контекста приложения. Теперь, в версии 3.0+ сортировка выполняется на уровне метаданных бинов, перед тем как будут созданы экземпляры классов. Это имеет отношение к тому, как добавлять свои собственные фильтры. Т. к. список фильтров должен быть полностью известен во время разбора элемента <code><http></code>, то в версии 3.0 синтаксис немного изменился.</blockquote>
 
Фильтры, псевдонимы, и элементы/атрибуты пространства имен, которые создают фильтры, показаны в таблице 2.1 «Псевдонимы стандартных фильтров и их порядок». Фильтры перечислены в том порядке, в котором они располагаются в цепочке фильтров.
 
{| class="wikitable"
|-
! Псевдоним !! Класс фильтра !! Элемент или атрибут пространства имен
|-
| CHANNEL_FILTER || ChannelProcessingFilter || http/intercept-url@requires-channel
|-
| CONCURRENT_SESSION_FILTER || ConcurrentSessionFilter || session-management/concurrency-control
|-
| SECURITY_CONTEXT_FILTER || SecurityContextPersistenceFilter || http
|-
| LOGOUT_FILTER || LogoutFilter || http/logout
|-
| X509_FILTER || X509AuthenticationFilter || http/x509
|-
| PRE_AUTH_FILTER || AstractPreAuthenticatedProcessingFilter дочерние классы || N/A
|-
| CAS_FILTER || CasAuthenticationFilter || N/A
|-
| FORM_LOGIN_FILTER || UsernamePasswordAuthenticationFilter || http/form-login
|-
| BASIC_AUTH_FILTER || BasicAuthenticationFilter || http/http-basic
|-
| SERVLET_API_SUPPORT_FILTER || SecurityContextHolderAwareFilter || http/@servlet-api-provision
|-
| REMEMBER_ME_FILTER || RememberMeAuthenticationFilter || http/remember-me
|-
| ANONYMOUS_FILTER || AnonymousAuthenticationFilter || http/anonymous
|-
| SESSION_MANAGEMENT_FILTER || SessionManagementFilter || session-management
|-
| EXCEPTION_TRANSLATION_FILTER || ExceptionTranslationFilter || http
|-
| FILTER_SECURITY_INTERCEPTOR || FilterSecurityInterceptor || http
|-
| SWITCH_USER_FILTER || SwitchUserFilter || N/A
|}
 
= Примечания =