如何使用多个自定义过滤器相互调用?

时间:2010-10-14 09:30:08

标签: spring spring-mvc spring-security

大家好我使用的是spring security 3.0.2 我有一个自定义过滤器,其顺序是最后一个 我想在该过滤器之后添加另一个过滤器,以下配置是否正确?

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

1 个答案:

答案 0 :(得分:3)

在查看我自己的代码之后,我注意到我没有使用'ref'属性,而是将此标记放在我的bean定义中,如下所示:

<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

即使是弹簧安全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之前的一个过滤器和之后的一个过滤器。

不知道您的标签放在哪里?但我喜欢将它们直接放在过滤器bean中...更容易维护: - )

希望有帮助!

PS:由于位置是基于整数,你可以把数字而不是枚举值(警告我们正确的位置编号,查看SecurityFilters枚举中的逻辑),不确定是否接受...