ユーザー認証での@ Secured、@ PreAuthorize、@ PostAuthorize、@ PreFilter、@ PostFilterの使用

ユーザー認証での@ Secured、@ PreAuthorize、@ PostAuthorize、@ PreFilter、@ PostFilterの使用

まず、いくつかの英語の単語の意味をマスターします

承認:承認

認証:認証

保護:保護

どこで使われていますか?

以下に示すように、これらの5つの注釈はすべて、コントローラーのメソッドの上で使用されます。

ここに写真の説明を挿入

SpringSecurityの注釈を有効にする

Spring Securityはデフォルトでアノテーションを無効にするため、まず、スタートアップクラスまたは構成クラス(@Configurationアノテーションを使用)でアノテーションを有効にする必要があります。アノテーションを有効にするには、スタートアップクラスまたは構成クラスに@EnableGlobalMethodSecurityアノテーションを追加する必要があります。

@Securedアノテーションを有効にする場合は、@ EnanleGlobalMethodSecurity(securedEnabled = true)アノテーションをスタートアップクラスまたは構成クラスに追加する必要があります.4つのアノテーション@ PreAuthorize、@ PostAuthorize、@ PreFilter、および@PostFilterを有効にする場合は、スタートアップクラスを入力する必要があります。 @EnableGlobalMethodSecurity(prePostEnabled = true)アノテーションを構成クラスに追加します。

したがって、これら5つの注釈を使用する場合は、最初に@EnableGlobalMethodSecurity(securedEnabled = true、prePostEnabled = true)注釈をスタートアップクラスに追加して、Spring Securityでこれら5つの注釈を有効にしてから、それらを使用する必要があります。以下に示すように、クラスで注釈を開きます。

ここに写真の説明を挿入

@Securedアノテーション

@Securedアノテーションの機能:ユーザーがブラウザーにリクエストを送信すると、コントローラーのメソッドにアクセスし、コントローラーのメソッドにアクセスする前に、まずUserDetailsS​​erviceユーザー詳細実装クラスの実装メソッドで返されたユーザーオブジェクトに移動します。 @Securedアノテーションで指定された役割があるかどうかを確認します。指定された役割がある場合、システムはユーザーにこのコントローラーメソッドへのアクセスを許可します。そうでない場合、システムはこのコントローラーメソッドへのアクセスを許可しません。@ Securedを使用して役割名を設定する場合は、役割に注意してください。以下に示すように、名前の前にはROLE_;を付ける必要があります。

ここに写真の説明を挿入

UserDetailsS​​erviceユーザー詳細実装クラスの状況は次のとおりです。

ここに写真の説明を挿入

UserDetailsS​​erviceのユーザーはROLE_xzyの役割を持っているため、コントローラーのupdateメソッドにアクセスできます。ブラウザーでのアクセスは次のとおりです。

ここに写真の説明を挿入

@PreAuthorizeアノテーション(アクセス方法の前の権限認証)

@PreAuthorizeアノテーションの役割:ブラウザがリクエストを送信すると、コントローラの対応するメソッドにアクセスします。@ PreAuthorizeアノテーションは、コントローラのメソッドにアクセスする前に権限認証を実行します。UserDetailsS​​erviceユーザー詳細実装クラスで対応するものを確認してください。ユーザーは対応する権限を持っていますか?その場合、ユーザーが送信したリクエストは、コントローラーに対応するメソッドを入力できます。対応する権限がない場合、ユーザーが送信したリクエストは、コントローラーに対応するメソッドを入力できません。

@PreAuthorizeアノテーションの使用法は次のとおりです。

ここに写真の説明を挿入

UserDetailsS​​erviceユーザー詳細実装クラスの状況は次のとおりです。

ここに写真の説明を挿入

UserDetailsS​​erviceのユーザーには管理者権限があるため、コントローラーのupdate2メソッドにアクセスできます。ブラウザーでのアクセスは次のとおりです。ここに写真の説明を挿入

@PostAuthorizeアノテーション(アクセス方法後の権限認証)

@PostAuthorizeアノテーションの機能:コントローラー内の関連するメソッドにアクセスした後(メソッドの戻り値は最初にアクセスされません)、アクセス許可認証を実行して、UserDetailsS​​erviceユーザー詳細実装クラスのユーザーが対応するアクセス許可を持っているかどうかを確認します。コントローラメソッドの最後のreturnステートメントが実行されます。それ以外の場合、コントローラメソッドの最後のreturnステートメントは実行されません。

@PostAuthorizeアノテーションの使用法は次のとおりです。

ここに写真の説明を挿入

UserDetailsS​​erviceユーザー詳細実装クラスの状況は次のとおりです。

ここに写真の説明を挿入

ユーザー詳細実装クラスのユーザーにはadmins権限のみがあり、admins4またはadmins5権限はないため、コントローラーのreturnステートメントは実行されません。ブラウザーへのアクセスを要求した後の状況は次のとおりです。

ここに写真の説明を挿入

次に、アイデアのコンソールのupdate3メソッドのステートメントを次のように出力できることがわかります。

ここに写真の説明を挿入

これは、@ PostAuthorizeアノテーションを使用する場合、コントローラーのメソッドが最初に実行され、returnの最後の文が実行されるときに、許可が認証されることを意味します。

@PostFilterアノテーション

@PostFilterアノテーションは、コントローラーメソッドの戻り値がコレクションである場合にのみ使用できることに注意してください。

@PostFilterアノテーションの機能:コントローラーメソッドの戻り値がセットの場合、このアノテーションは戻りセットをフィルター処理して出力できます。

@PostFilteアノテーションを使用して、コレクションタイプの戻り値をフィルタリングします。@PostFilterを使用すると、Spring Securityは、対応する式の結果をfalseにする要素を削除します。

@PostFilterアノテーションの使用法は次のとおりです。

ここに写真の説明を挿入

上の図のfilterObjectは、@ PreFilterおよび@PostFilterを使用する場合の組み込み式であり、コレクション内の現在のオブジェクトを表します。

ブラウザでの対応する結果は次のとおりです。

ここに写真の説明を挿入

@PreFilterアノテーション

注:@PreFilterアノテーションは、コントローラーメソッドのパラメーターがコレクションタイプの場合にのみ使用できます。

@PreFilterアノテーションの役割:コントローラーメソッドのパラメーターをフィルター処理できます。

この注釈をテストしたとき、テストに成功しなかったのは5つの注釈のうちの1つだけだったので、他のブロガーによるこの注釈の要約を見つけるためにBaiduに行き、すぐ下に貼り付けました。誰かがこの注釈を知っている場合テストの方法を教えてください。

Baiduは次のように貼り付けます。

filterObjectは、@ PreFilterおよび@PostFilterを使用する場合の組み込み式であり、コレクション内の現在のオブジェクトを表します。@PreFilterで注釈が付けられたメソッドに複数のセットタイプのパラメーターがある場合、@ PreFilterのfilterTargetプロパティは、現在の@PreFilterがフィルタリングするパラメーターを指定する必要があります。
 たとえば、次のコードは、現在の@PreFilterを使用してfilterTargetを介してパラメータIDをフィルタリングすることを指定しています。

   @PreFilter(filterTarget="ids", value="filterObject%2==0")
   public void delete(List<Integer> ids, List<String> usernames) {
      ...
   }

おすすめ

転載: blog.csdn.net/qq_45950109/article/details/112982204