Spring Security <http>和<intercept-url>模式属性

thl*_*lim 4 spring-security spring-security-oauth2

我看过Spring Security OAuth2样本中定义了这个spring-servlet.xml,

   <http pattern="/users/**" create-session="never" entry-point-ref="oauthAuthenticationEntryPoint"
      access-decision-manager-ref="accessDecisionManager" xmlns="http://www.springframework.org/schema/security">
    <anonymous enabled="false" />
    <intercept-url pattern="/photos" access="ROLE_USER,SCOPE_READ" />
    <intercept-url pattern="/photos/trusted/**" access="ROLE_CLIENT,SCOPE_TRUST" />
    <intercept-url pattern="/photos/user/**" access="ROLE_USER,SCOPE_TRUST" />
    <intercept-url pattern="/photos/**" access="ROLE_USER,SCOPE_READ" />
    <custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" />
    <access-denied-handler ref="oauthAccessDeniedHandler" />
</http>
Run Code Online (Sandbox Code Playgroud)

标签中的pattern属性是否http有效?我找不到它的定义spring-security-2.0.1.xsd.如果它是有效的,这是什么图案的关系intercept-urlpattern属性?举例来说,拦截路径/photos/user/**是否具有最终匹配的拦截路径/users/photos/user/**?谢谢.

Sha*_*eep 8

pattern属性在3.1中引入,它引入了对多个过滤器链的命名空间支持.Spring Security 2已经过时了(你不应该使用它).

intercept-url元素中的模式是独立的,因为它们与传入的请求URI匹配,其方式与http检查过滤器链模式的方式相同.但是,如果后者不匹配,则过滤器链根本不会应用于请求,因此为了产生任何效果,它们必须与过滤器链模式一致.

对于您发布的示例,这意味着没有/photos任何模式有任何影响.它们都应该具有主过滤器链匹配的前缀 - 即它们应该以/users/photos.

  • 除了让两者独立之外,你还有什么设计呢?确定一个蚂蚁模式是否"包含"在另一个中是不容易的问题.如果过滤器链模式是`/**/users/**`怎么办? (3认同)