2016-05-29 94 views
0

在Spring Security:春季安全,访问= “ROLE_ADMIN论” 与接入=“hasAnyRole( 'ROLE_ADMIN')

<sec:http pattern="/api/**" 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="/api/**" access="ROLE_ADMIN" /> 
     <custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" /> 
     <access-denied-handler ref="oauthAccessDeniedHandler" /> 
</sec:http> 
在这一行 <intercept-url pattern="/api/**" access="ROLE_ADMIN" />

有什么区别的意思,如果我写的:

<intercept-url pattern="/api/**" access="hasRole('ROLE_ADMIN')" />

或:

<intercept-url pattern="/api/**" access="hasAnyRole('ROLE_ADMIN')" />

回答

3

作为Spring Security documentation状态:

hasRole([作用]):如果当前主体具有 指定role

hasAnyRole([基于role1,基于role2]),则返回true :如果当前主体有任何提供的角色(以逗号分隔的字符串列表的形式给出),则返回true。

此外,在access属性,documentation状态:

访问:列出将要存储在 FilterInvocationSecurityMetadataSource为所定义的URL 图案/方法的组合的访问属性。这应该是安全配置属性(,如角色名称)的逗号分隔列表 。

但在你的情况,你传递一个元素列表中hasAnyRole,所以:

访问= “ROLE_ADMIN论” 与接入=“hasAnyRole( 'ROLE_ADMIN')

hasRole('ROLE_ADMIN')hasAnyRole('ROLE_ADMIN')是相同的,都意味着当前主要应具有ROLE_ADMIN权限。

(一“委托人”通常表示用户,设备或可以在您的应用程序中执行操作的其他系统)。