Переопределение Spring AuthenticationProcessingFilter - PullRequest
1 голос
/ 29 июля 2009

Я пытаюсь переопределить AuthenticationProcessingFilter в безопасности Spring. Я сделал следующие настройки в XML:

<security:http access-decision-manager-ref="accessDecisionManager" >
        <security:intercept-url .../>
        <security:form-login login-page='/signin/' authentication-failure-url="/signin/?login_error" default-target-url='/signin/success'/>
        <security:anonymous/>
        <security:logout/>
        <security:remember-me/>
</security:http>

<bean class="myPackage.security.SessionCleanerFilter" >
    <security:custom-filter position="FILTER_SECURITY_INTERCEPTOR" />
    <property name="defaultTargetUrl" value="/signin/success" />
    <property name="authenticationFailureUrl" value="/signin/?login_error" />
    <property name="allowSessionCreation" value="true" />
</bean>

Но это терпит неудачу со множеством исключений

Ошибка создания бина с именем 'MyPackage.security.SessionCleanerFilter # 0'

из-за отсутствия врожденных свойств. Я хотел бы, чтобы они были по умолчанию. Вы знаете, как их настроить?

Ответы [ 3 ]

1 голос
/ 29 июля 2009

Не должно ли быть:

<security:custom-filter position=“AUTHENTICATION_PROCESSING_FILTER”/>
0 голосов
/ 11 сентября 2012

Подход, которому вы должны следовать, зависит только от того, что вы действительно хотите делать в своем пользовательском фильтре.

Я столкнулся с подобной проблемой, посмотрите на этот пост несколько предложений https://stackoverflow.com/a/12356510/686478.

security:form-login внутренне создает определение компонента для AuthenticationProcessingFilter, и, следовательно, переопределение его в той же позиции (в вашем случае его FORM_LOGIN_FILTER или AUTHENTICATION_PROCESSING_FILTER, как он вызывался в 2.x ), может вызвать ошибку, поскольку bean-компонент уже определен обработчиком пространства имен http. См. Добавление собственного фильтра в разделе справочного руководства.

Простая опция - установить auto-config в false, удалить <form-login> и определить свой фильтр авторизации в предопределенном положении, но при этом вы также потеряете удобство использования и удобочитаемость вашей конфигурации безопасности, и вам придется управлять зависимости вашего AuthenticationProcessingFilter самостоятельно (например, настройка AuthenticationManager, filterProcessesUrl и т. Д.).

Если вы действительно не хотите перезаписывать существующий фильтр аутентификации, а просто хотите выполнить некоторую предварительную / последующую обработку, другой альтернативой является определение пользовательского фильтра с использованием атрибутов after или before, который вызывается до или после фактического фильтра.

Примечание: Исходя из строки темы, я предполагаю, что вы намерены использовать AUTHENTICATION_PROCESSING_FILTER, а не FILTER_SECURITY_INTERCEPTOR, который является псевдонимом для FilterSecurityInterceptor.

Я знаю, что это своего рода устаревший пост, но я надеюсь, что это поможет некоторым :))

0 голосов
/ 20 ноября 2009

Вам также нужно отключить автоконфигурацию:

<security:http auto-config="false" access-decision-manager-ref="accessDecisionManager">

и затем вам больше не нужен тег <security:form-login>, поскольку вы устанавливаете те же свойства в своем бине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...