2016-06-25 21 views
2

私はSpring Securityバージョン4.1を使用しています。セキュリティ設定でaccess="hasRole('ROLE_ADMIN')"またはaccess="ROLE_ADMIN"と指定すると、ログインできますが、管理者ページにアクセスできません。以下はSpringセキュリティは「hasRole( 'ROLE_ADMIN')」またはROLE_ADMINで動作しません

<security:http use-expressions="true"> 
    <security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" /> 
    <!-- security:intercept-url pattern="/admin" access="hasRole('ROLE_ADMIN')"/--> 
    <security:intercept-url pattern="/createmanufsensors" access="isAuthenticated()" /> 
</security:http> 
<security:global-method-security secured-annotations="enabled"></security:global-method-security> 

デバッグエラーです:

DEBUG [http-bio-8080-exec-10] [org.springframework.security.web.access.intercept.FilterSecurityInterceptor] Secure object: FilterInvocation: URL: /admin; Attributes: [hasRole('ROLE_ADMIN')]  
2016-06-25 10:07:53,667 [] DEBUG [http-bio-8080-exec-10] [org.springframework.security.web.access.intercept.FilterSecurityInterceptor] Previously Authenticated: org.springframew[email protected]cc305a73: Principal: [email protected]: Username: francatore             ; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN        ; Credentials: [PROTECTED]; Authenticated: true; Details: org.sprin[email protected]166c8: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: 7F702A6911A71EA5556C750B6D424FF5; Granted Authorities: ROLE_ADMIN         
2016-06-25 10:07:53,667 [] DEBUG [http-bio-8080-exec-10] [org.springframework.security.access.vote.AffirmativeBased] Voter: org.sp[email protected]170ea084, returned: -1 
2016-06-25 10:07:53,668 [] DEBUG [http-bio-8080-exec-10] [org.springframework.security.web.access.ExceptionTranslationFilter] Access is denied (user is not anonymous); delegating to AccessDeniedHandler 

私はおそらく何をしないのだろうか?

+0

ロールは、ユーザーが作成してアカウントを作成するときにユーザーに割り当てられます。上記のユーザーには 'ROLE_ADMIN'が割り当てられ、残りのユーザーには 'ROLE_USER'が割り当てられました。ロールは、データベース内の権限テーブルに保管されます。 –

答えて

4

私はこれについて少し説明しています。 ここでは、通常のユーザーとして認証されていますが、管理ページの表示は許可されていません。

あなたがaccess="hasRole('ROLE_ADMIN')"式を使用している場合は、春ELクラス(すなわちSecurityExpressionRootは)我々がhasRole()式で提供しているすべての役割 にプレフィックスROLE_を追加します。あなたのケースでは、hasRole('ROLE_ADMIN')で提供した役割はROLE_ROLE_ADMINに解決されます。

ROLE_ADMINのユーザーとして認証されている理由です。しかし、管理ページを表示するSpring Securityフレームワークには、クラスに接頭辞ROLE_が追加されているため、ユーザは ROLE_ROLE_ADMINのロールを持っていなければなりません。

だから、これのためにすなわち、コード内でそのROLE_接頭辞を削除し、ここでaccess="hasRole('ADMIN')" ので、春のセキュリティは、そのROLE_接頭辞に自動的に追加されます。 そして、データベースの管理者ロールがROLE_ADMINと指定されていることを確認してください。

関連する問題