Spring 如何使用一个以上的自定义过滤器,每个过滤器调用后?

Spring 如何使用一个以上的自定义过滤器,每个过滤器调用后?,spring,spring-mvc,spring-security,Spring,Spring Mvc,Spring Security,大家好,我正在使用SpringSecurity 3.0.2 我有一个自定义过滤器,它的顺序是最后一个 我想在这个过滤器之后再添加一个过滤器,下面的配置正确吗 <custom-filter position="LAST" ref="filter1"/> <custom-filter after="LAST" ref="filter2"/> 查看我自己的代码后,我注意到我没有使用'ref'属性,而是将此标记放在bean定义中,如下所示: <bean id="ntlmF

大家好,我正在使用SpringSecurity 3.0.2 我有一个自定义过滤器,它的顺序是最后一个 我想在这个过滤器之后再添加一个过滤器,下面的配置正确吗

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

查看我自己的代码后,我注意到我没有使用'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>

资料来源:

即使是针对SpringSecurity2,其行为在版本3中也是一样的

您可以在org.springframework.security.config.http.SecurityFilters枚举中找到所有可能的位置:

您可以使用此枚举中已定义的某些位置来定义自定义筛选器的设置顺序

例如:

  • 一个过滤器位于最后一个过滤器之前,一个过滤器位于最后一个过滤器之后(但不能位于最后一个过滤器之后!最后一个过滤器之后不能有任何内容!)
  • 或者在切换用户过滤器之前设置一个过滤器,在切换用户过滤器之后设置一个过滤器
不知道你的标签放在哪里?但是我喜欢把它们直接放在过滤豆里面。。。易于维护:-)

希望这有帮助


PS:由于位置是基于整数的,您可能可以将数字而不是枚举值(请注意正确的位置编号,请查看SecurityFilters枚举中的逻辑),不确定是否接受…

我按照您所说的做了,并得到以下错误-cvc属性。3:元素“自定义筛选器”上“after”的属性“filter1”的值对于其类型“named security filter”无效。更多说明:-cvc枚举有效:值“filter1”对于枚举无效[首先,CHANNEL_FILTER,….哎呀,我要看看我的代码里面,似乎我的内存被破坏了。对不起,我错了。我用正确的代码编辑了我的回复!