Как использовать более одного пользовательского фильтра, вызываемого друг за другом?

привет всем, я использую Spring Security 3.0.2, и у меня есть один настраиваемый фильтр, и его порядок последний, и я хочу добавить еще один фильтр после этого фильтра, правильная ли следующая конфигурация?

<custom-filter position="LAST" ref="filter1"/>
<custom-filter after="LAST" ref="filter2"/>

person Mahmoud Saleh    schedule 14.10.2010    source источник


Ответы (1)


Посмотрев в свой собственный код, я заметил, что не использовал атрибут «ref», а вместо этого поместил этот тег в определение своего компонента следующим образом:

<bean id="ntlmFilter" class="org.springframework.security.ntlm.samples.failover.NtlmProcessingFilter">
    <sec:custom-filter position="NTLM_FILTER" />
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="retryOnAuthFailure" value="false" />
    <property name="securityConfiguration" ref="securityConfiguration" />
</bean>

Источник: http://github.com/aloiscochard/spring-security-ntlm-samples/blob/master/spring-security-ntlm-samples-failover/src/main/resources/applicationContext-security.xml

Даже если это для spring-security 2, поведение в версии 3 такое же.

Вы можете найти все возможные позиции в перечислении org.springframework.security.config.http.SecurityFilters:

http://grepcode.com/file/repo1.maven.org/maven2/org.springframework.security/spring-security-config/3.0.2.RELEASE/org/springframework/security/config/http/SecurityFilters.java

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

Например:

  • один фильтр перед ПОСЛЕДНИМ и один в ПОСЛЕДНЕМ (но не после ПОСЛЕДНЕГО! ничего не может быть после ПОСЛЕДНЕГО!)
  • или один фильтр перед SWITCH_USER_FILTER и один после.

Не знаете, где вы размещаете свои теги? но мне нравится иметь их прямо внутри фильтрующего компонента... проще в обслуживании :-)

Надеюсь, это помощь!

PS: Поскольку позиция основана на целом числе, вы, возможно, можете указать число вместо значения перечисления (предупредите нас о правильном номере позиции, посмотрите на логику внутри перечисления SecurityFilters), не уверен, что принято...

person Alois Cochard    schedule 14.10.2010
comment
я сделал, как вы сказали, и получил следующую ошибку - cvc-attribute.3: значение 'filter1' атрибута 'after' в элементе 'custom-filter' недействительно по отношению к его типу, 'named-security-filter '. - person Mahmoud Saleh; 14.10.2010
comment
более подробное описание: - cvc-enumeration-valid: значение 'filter1' не является допустимым по аспекту по отношению к перечислению '[FIRST, CHANNEL_FILTER,.... - person Mahmoud Saleh; 14.10.2010
comment
ой, я загляну в свой код, кажется, моя память была повреждена - person Alois Cochard; 14.10.2010
comment
извините, я был неправ. Я отредактировал свой ответ с правильным кодом! - person Alois Cochard; 14.10.2010