2017-03-06 17 views
0

私はいくつかのREST APIを持っています。@PreAuthorizeはどのように役割をチェックしますか?

私は、特定の役割だけの機能を許可するために、それらのすべての上にセキュリティを置いておきたいと思います。

@EnableGlobalMethodSecurity(prePostEnabled = true)を設定クラスに追加しました。

私は役割を格納するテーブルを持つDBを持っています。

@RequestMapping(path = "/error", method = RequestMethod.GET) 
@PreAuthorize("hasRole('ROLE_ADMIN')") 
public ResponseEntity<ResponseWrapper> getError(... 


INSERT INTO table USER_ROLE VALUES ('ADMIN','PASSWORD','ROLE_ADMIN'); 

メソッド "hasRole"はどのようにしてUSER_ROLEテーブルにクエリできますか? そのテーブルと通信するためにSpringに与えなければならない設定はありますか?

+0

基本的には、@PreAuthorizeがいくつかのロールを格納するテーブルとどのように通信するのかを理解したいと思います。 – pacio14

答えて

1

あなたの設定に以下を追加し確認してください:

注釈のスタイル:

@EnableGlobalMethodSecurity(prePostEnabled = true) 

XMLスタイル:

<global-method-security pre-post-annotations="enabled"/> 

It's all in the spring docs

@Pre@Post注釈を使用するには、まずプロジェクトで春のセキュリティを設定する必要があります。ユーザーの役割は、標準実装の認証時に読み込まれます。

アノテーションをチェックするとき(デフォルトでは)テーブルをチェックしないで、割り当てられたGrantedAuthority(ロール)のリストのメモリ内のPrincipal(ユーザ)オブジェクトをチェックするだけです。

詳しく見...

が、これはUserDetialsPrincipal)のインスタンスを返す、UserDetailsServiceインターフェースを見てみましょう。これがデータベースからあなたの「ユーザー」を取得する場所です。

UserDetialsインターフェイスはgetAuthorities()というメソッドを定義し、Collection<? extends GrantedAuthority>(本質的にはRoleテーブル)を返します。これが「ロール」によってメモリに格納され、後で@Preおよび@Post注釈でチェックすることができます。

上記で説明した実装はhereです。

+0

私は設定ファイルに注釈を入れます。 ロールがユーザのパラメータであるか、リクエストのパラメータであるか、または「hasrole」メソッドとテーブル... – pacio14

+0

あなたは今私が答えで説明したものに似た何かを設定しなければなりません。 – dkanejs