根据 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>
我们有一个 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>