2016-05-29 28 views
0

対アクセス= "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も([役割]):現在のプリンシパルが([ROLE1、role2の]) 指定role

hasAnyRoleを有している場合にtrueを返し現在のプリンシパルに指定されたロールがあればtrueを返します(コンマで区切られた文字列のリストとして与えられます)。

また、access属性、documentation状態に:

アクセス:定義されたURL パターン/メソッドの組み合わせについて FilterInvocationSecurityMetadataSourceに格納されるアクセス属性を一覧表示します。これは、セキュリティ構成属性(、ロール名など)をカンマ区切りの のリストにする必要があります。

しかし、あなたの場合には、あなたはそう、hasAnyRoleに単一要素リストを渡している:

アクセスアクセス= "hasAnyRole( 'ROLE_ADMIN')

VS = "ROLE_ADMINを"

hasRole('ROLE_ADMIN')hasAnyRole('ROLE_ADMIN')同一であり、両方が現在のプリンシパルがROLE_ADMIN権限を有していなければならないことを意味する。

「プリンシパル」は、一般に、ユーザー、デバイス、またはアプリケーションでアクションを実行できる他のシステムを意味します)。

関連する問題