我们可以在filterChainProxy中为单个过滤器链提供多种模式

时间:2012-07-13 09:28:05

标签: spring spring-security

我有两种模式可以应用相同的过滤器。

<security:filter-chain pattern="/home.do*" filters="a,b,c,d" />
<security:filter-chain pattern="/login.do*" filters="a,b,c,d" />

除上述两个外,还有许多其他独特模式和通用模式/**/*.do*/**

我可以在模式属性中指定逗号分隔的多个模式,如下所示:

<security:filter-chain pattern="/home.do*, /login.do*" filters="a,b,c,d" />

1 个答案:

答案 0 :(得分:6)

是的,你可以,但实现取决于你正在使用的Spring Security版本。

  • 在3.0中,您可以使用path-type属性:

    <security:filter-chain-map path-type="regex">
      <security:filter-chain pattern="^/(test|home)\.do$" filters="a,b,c,d" />
      <!-- other patterns -->
    <security:filter-chain-map path-type="regex">
    
  • 在3.1中,您可以使用request-matcher属性(不推荐path-type,只需更改路径类型以在前面的示例中请求匹配器),或者您可以使用多个http使用request-matcher-ref bean的元素并执行此操作:

    <http pattern="test.do,home.do" security="none" <!-- 'none' as example -->
        request-matcher-ref="requestMatcher" />
    
    <bean id="requestMatcher" class="com.example.CommaSeparatedRequestMatcher" />
    

    使用您的自定义实现CommaSeparatedRequestMatcher(根据请求和triest创建的URL匹配任何字符串),例如RegexRequestMatcher