2

我有两个要应用相同过滤器的模式。

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

4

1 回答 1

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-refbean 一起使用并执行以下操作:

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

    使用您的自定义实现CommaSeparatedRequestMatcher(拆分从请求创建的 URL 并尝试匹配任何字符串),例如,基于RegexRequestMatcher.

于 2012-07-13T14:43:20.583 回答