2017-03-11 5 views
-1

で働いていない私はこれをテストするには[admin, player, user] としてGrantedAuthoritiesを持って、私はこの方法で認証オブジェクトを注入し、を呼び出したが、RESTコントローラメソッドで私は403 forbidden.春@PreAuthorizeがRestController

として、私は私のREST Webサービスのための応答を取得しています @PreAuthorize("hasRole('ROLE_player')")を入れるとしています

データベースから選択するカスタムロールが定義されています。私は、ビジネスロジックの実行前にREST呼び出しを許可する必要があります。 @Securedと試しても、まだ動作していません。

+1

彼らは、管理者、選手、データベースからユーザです。私は@PreAuthorize( "hasRole( 'player')")で試してみましたが、まだ動作していません。 –

+1

春には役割に接頭辞ROLE_が必要です。データベースの役割をROLE_ADMIN、ROLE_PLAYER、ROLE_USERに更新するか、hasRole()@PreAuthorize( "hasAuthority( 'admin') ')の代わりにhasAuthority(' admin ')を使用できるようにする必要があります。 – jmw5598

答えて

0

hasRoleのデフォルト接頭辞はROLE_です。接頭辞が指定されていない場合は、自動的に接頭辞が追加されます。データベース内のあなたのロールにはROLE_が前置されていないので、hasRoleと一致しません。

// will be checking for ROLE_admin, your role in DB is admin 
@PreAuthorize("hasRole('admin')") 

あなたはROLE_でそれらを接頭辞や接頭辞スプリングがDefaultWebSecurityExpressionHandlerに使用しています変更することができ、あなたのデシベルであなたの役割を更新することができます。また、hasRoleではなくhasAuthorityを使用できるようにする必要があります。 hasAuthorityは、指定されたパラメータにプレフィックスを追加しません。

@PreAuthorize("hasAuthority('admin')") 

http://docs.spring.io/spring-security/site/docs/current/reference/html/el-access.html