根据 applicationContext.xml 中的条件向 spring-security 过滤器链添加一个过滤器 bean

Add a filter bean to spring-security filter chain based on condition in applicationContext.xml

我们有一个 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 之间切换

    <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>