在Spring中为bean引用列表定义本地属性

时间:2011-08-31 20:52:40

标签: spring spring-security

Spring 3.x

我在filter-chain中有越来越多的过滤器,我正在寻找一种方法来减少上下文文件中这些声明的详细程度。例如,使用spring docs

中的示例
<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
  <sec:filter-chain-map path-type="ant">
    <sec:filter-chain pattern="/webServices/**" filters="
       securityContextPersistenceFilterWithASCFalse,
       basicAuthenticationFilter,
       exceptionTranslationFilter,
       filterSecurityInterceptor" />
  </sec:filter-chain-map>
</bean>

想象一下,我们有许多模式都需要相同的过滤器链,我希望能够像" securityContextPersistenceFilterWithASCFalse, basicAuthenticationFilter, exceptionTranslationFilter, filterSecurityInterceptor"一样定义这个上下文的本地字符串,并在上下文中使用它

<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
  <sec:filter-chain-map path-type="ant">
    <sec:filter-chain pattern="/foo/**" filters="${defaultFilterChain}" />
    <sec:filter-chain pattern="/bar/**" filters="${defaultFilterChain}" />
    ...
  </sec:filter-chain-map>
</bean>

这里没有使用属性,因为它们将被视为String,而不是可以用作bean引用的列表。

2 个答案:

答案 0 :(得分:0)

使用PropertyPlaceholderConfigurer替换属性占位符,它可以从外部资源获取属性,但它也可以直接获取属性,并且可以同时使用外部和直接配置。外部属性将覆盖直接配置的属性,使直接配置的属性可用作默认值(可以关闭此行为,使其反过来)。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="properties">
    <props>
      <prop key="defaultFilterChain">securityContextPersistenceFilterWithASCFalse, basicAuthenticationFilter, exceptionTranslationFilter, filterSecurityInterceptor</prop>
    </props>
  </property>
</bean>

答案 1 :(得分:0)