java - 根据 applicationContext.xml 中的条件向 spring-security 过滤器链添加过滤器 bean
问题描述
我们有一个 spring-security 过滤器链,如下所示,我们在 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 文件中实现的解决方案。
更新:我在发布这个问题之前尝试了下面的代码,但它对我不起作用,但根据@RG 的评论,它看起来应该可以工作。请指出错误的地方(为简单起见,我将条件替换为“真”)
<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>
推荐阅读
- css - CSS sidebar overlapping container content
- oracle - Hash Join with Partition restriction from third table
- excel - Moving average excluding weekends and holidays
- perl - Parse service now ticket data in Perl INC and short description
- javascript - 如何获取滚动条内可见div的id
- c# - 调试长时间运行的 Web 服务调用
- sql-server - 用于备份 SQL Server 并将文件保存到 Amazon s3 的脚本
- mongodb - 是否可以确定 MongoDB 4.x 事务的事务号?
- python - Create a dataframe from a list with multiple columns
- c++ - 如何避免在包装器中重复函数声明