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

时间:2014-10-03 10:53:45

标签: 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>

pattern标记中的http属性是否有效?我在spring-security-2.0.1.xsd中找不到它的定义。如果它有效,此模式与intercept-url的{​​{1}}属性的关系是什么?例如,拦截路径pattern是否具有/photos/user/**的最终匹配拦截路径?感谢。

2 个答案:

答案 0 :(得分:8)

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

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

对于您发布的示例,这意味着/photos模式都不会产生任何影响。它们都应该具有主过滤器链匹配的前缀 - 即它们应该以{{1​​}}开头。

答案 1 :(得分:1)

在spring security 4的情况下,haseRole('ADMIN')检查角色,试试吧。

它适用于我。