Spring Security, namespace-конфигурация, замена дефолтного FilterSecurityInterceptor (original) (raw)
Spring Security, namespace-конфигурация, замена дефолтного FilterSecurityInterceptor
Здравствуйте!
Пишу динамическую систему пользователь/роль/пермишен/etc. над Spring Security.
Не получается заменить дефолтный FilterSecurityInterceptor, созданный посредством namespace-конфигурации FilterChainProxy, хотя делаю все согласно докам. Не очень хочется прописывать все необходимые бины фильтров и провайдеров "ручками", да и конфиг получается слишком громоздким. Кто-нибудь сталкивался с подобной проблемой?
Есть namespace-конфиг Spring Security, создающий FilterChainProxy:
security:http
<security:form-login login-page='/logonForm.do' authentication-failure-url="/logonForm.do"/>
<security:logout logout-success-url="/logonForm.do" logout-url="/logout.do" />
<security:authentication-manager alias="authenticationManager"/>
...
Необходимо подсунуть свой objectDefinitionSource правил для url-based авторизации, хранящихся в РБД. Согласно докам, делается это объявлением бина FilterSecurityInterceptor, с нужным objectDefinitionSource, при этом указывая, что этим бином нужно заменить тот, что был создан при создании FilterChainProxy (тег <security:custom-filter position="FILTER_SECURITY_INTERCEPTOR" />):
...Обявления authenticationManager, accessDecisionManager, security.objectDefinitionSource опускаю за ненадобностью.
Основная проблема в том, что объявляемый прямо FilterSecurityInterceptor не заменяет соответствующий бин в FilterChainProxy. При этом контейнер выдает ексепшен:
Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name '_filterChainProxy': Initialization of bean failed; nested exception is org.springframework.security.config.SecurityConfigurationException: Filters 'org.springframework.security.intercept.web.FilterSecurityInterceptor@10c6406' and 'org.springframework.security.intercept.web.FilterSecurityInterceptor@1474fc' have the same 'order' value. When using custom filters, please make sure the positions do not conflict with default filters. Alternatively you can disable the default filters by removing the corresponding child elements from and not avoiding the use of .
Т.е. получается, что дефолтный FilterSecurityInterceptor, созданный посредством namespace-конфигурации, заменить невозможно, не смотря на то, что документация говорит обратное? Кто-нибудь сталкивался с этим?
Исходные данные: Spring 2.0.6, Spring Security – 2.0.2, Java 5, Tomcat 5.5.20