根据applicationContext.xml中的条件,将过滤器bean添加到spring安全过滤器链中



我们有一个如下所示的spring安全过滤器链,其中我们为applicationContext.xml 中的每个url模式提供过滤器列表

<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy"> <constructor-arg index="0">
<list>
<security:filter-chain pattern="/rest" filters="
sessionContextIntegrationFilter,
${bean.loggingFilter},
${bean.basicProcessingFilter},`

现在,有什么方法可以根据条件向这个链添加过滤器吗?使用SpEL 类似于以下内容

"#{'${some.condition}'.equalsIgnoreCase('true') ? actualFilter: dummyFilter}" />

在不使用注释或概要文件的情况下,请建议一个可以在同一个xml文件中实现的解决方案。

更新:在发布这个问题之前,我已经尝试过下面的代码,但它对我不起作用,但根据@R.G的评论,它看起来应该起作用。请指出错误的地方(为了简单起见,我将条件替换为"true"(

<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy"> <constructor-arg index="0">
<list>
<security:filter-chain pattern="/rest" filters="
sessionContextIntegrationFilter,
${bean.loggingFilter},
${bean.basicProcessingFilter},
#{ 'true' == 'true' ? 'actualFilter' : 'dummyFilter' }"/>
</list></constructor-arg>
</bean>

下面将根据条件在过滤豆之间切换

<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy"> <constructor-arg index="0">
<list>
<security:filter-chain pattern="/rest" filters="
sessionContextIntegrationFilter,
${bean.loggingFilter},
${bean.basicProcessingFilter},
#{ some.condition == 'true' ? 'actualFilter' : 'dummyFilter' }"/>
</list></constructor-arg>
</bean>

最新更新