1.はじめに 春のセキュリティ戦闘ドライ[1]シリーズへようこそ。前回の役割ベースの構成インターフェースへのアクセス制御では、[2]我々はjavaConfigの方法でのconfigure役割ベースのアクセス制御インタフェースする方法について説明します。実際には、注釈に基づいて、より柔軟な構成があります。今日は見ていきます。テキストの最後にDEMO取得モード。
2.春のセキュリティ方式セキュリティ 春のセキュリティアノテーションベースのセキュリティ認証を達成するために、関連する方法でセキュリティアノテーション・マークによって行われます。
2.1オープングローバルセキュリティ方法は 、我々はグローバルセキュリティアノテーションを有効にするために任意の@Configurationインスタンスメソッドに@EnableGlobalMethodSecurityのコメントを使用することができます。このノートでは、我々が探求する別の章を開くために持っているので、同じ機能を実現するために3つの異なるメカニズムを提供します。
3. @EnableGlobalMethodSecurity注釈 @Retention(値= java.lang.annotation.RetentionPolicy.RUNTIME) @Target(java.lang.annotation.ElementType.TYPE値= {}) @Documented @import(GlobalMethodSecuritySelector.class {}) @EnableGlobalAuthentication @Configuration 公共@interface EnableGlobalMethodSecurity {
/ ** 式に基づいて*アクセス制御方式 * / ; falseにブールprePostEnabled()デフォルト
/ ** *ベースの注釈@Secured * / falseにブールsecuredEnabled()デフォルト;
/ ** *注釈JSR-250に基づく * / ブールjsr250Enabled()デフォルトfalseに、
ブールはfalseデフォルトにproxyTargetClass();
int型受注()デフォルトOrdered.LOWEST_PRECEDENCE; } @EnableGlobalMethodSecurityソースコードprePostEnabled、securedEnabledを提供し、3つの方法jsr250Enabled。あなたが開くと、我々は@EnableGlobalMethodSecurityノートを使用する必要がありますされているグローバルアノテーションベースのアプローチのセキュリティ機能は、いくつかである1つまたは3つすべてを使用することを選択します。次に、私たちはそれらを紹介します。
4. prePostEnabled あなたは@EnableGlobalMethodSecurityでtrueに設定されているprePostEnabled場合、セキュリティの発現に基づいて制御方法を開きます。ブール式によって演算結果が(拒否真のオープン、false)をアクセスすることができるかどうかを判断します。時には、あなたはオープンprePostEnabled複雑な操作を実行する必要があるかもしれません。これらの例については、あなたは@EnableGlobalMethodSecurity(=真prePostEnabled)は、サブクラスであることを保証するために、GlobalMethodSecurityConfigurationを拡張することができます。たとえば、カスタムMethodSecurityExpressionHandlerを提供する場合:
@EnableGlobalMethodSecurityを(= prePostEnabledがtrueに) publicクラスMethodSecurityConfig GlobalMethodSecurityConfigurationが延び{ @Overrideは MethodSecurityExpressionHandler createExpressionHandlerは(){保護 //作成し、カスタムMethodSecurityExpressionHandlerを返す... ... expressionHandlerを返します; } } 上記の例では、高度な操作であり、一般的に必要ではありません。かどうかは、すべてのGlobalMethodSecurityConfigurationは、4つのノートを開きます継承されました。@PreAuthorize @PostAuthorizeとメソッド呼び出しの制御に焦点を当て、そして@PreFilter @PostFilter制御データに焦点を当てました。
4.1 @PreAuthorize 式が不正アクセスにより算出することができるかどうか、メソッド呼び出しをマークする前に。次に、私は次の一般的に使用される式をまとめます。
式SecurityExpressionOperationsインターフェイスベース、javaConfig構成の記事[3]には、私たちです。例:@PreAuthorize( "hasRoleも( 'ADMINは ')") ROLE_ADMINの役割を持っている必要があります。 現在のユーザーのためのいくつかの追加の操作を定義するには、この式の表現に基づいてUserDetails。例:ユーザ名@PreAuthorizeの始まり(「principal.username.startsWith( 『Felordcnは』 )」) Felordcnのユーザーがアクセスすることができます。 SPEL式処理のパラメータに基づいています。SPEL式は、公式ドキュメントを参照することができます。または社会的関心の数によって:関連する情報を取得するFelordcn。例:@PreAuthorize(「#id.equals(principal.username )」) 参照IDには、現在のユーザ名と同じでなければなりません。 4。 2 @PostAuthorize 発現が不正アクセスによって計算することができるかどうか、メソッド呼び出しをマーキングした後。このコメントは@PreAuthorizeためです。相違点は、第一実施方法ということです。その後、裁判官に表現。この方法は、値を返さない場合、実質的にオープンアクセス制御に等しい;戻り値は、成功に応答して、実際にユーザ操作の結果であるがない場合。
4.3 @PreFilter 基準フィルタの発現に関連するパラメータに基づきます。注意してページング!これは、インターフェイスパラメータを受信する前に発生します。パラメータはのjava.util.Collectionおよびサポートのremove(Object)をパラメータでなければなりません。フィルタの複数のセットがある場合filterTarget = <パラメータ名>のセットで指定する必要があります。内蔵filterObjectは、フィルタの動作を評価するための要素のコレクションの名前として名前を禁じます。
例:
コレクションの<string> IDSテストデータ[ "Felordcn"、 "felord"、 "桟橋は"]への参照//
// felord桟橋がFelordcn濾過し @PreFilter(値=「filterObject.startsWith( 'F.') 「filterTarget =」IDS 『) //現在のユーザがROLE_ADの役割パラメータはFの先頭からの行かないフィルターにしている保持している場合 // DEMOユーザーの役割、したがって、ROLE_ADコレクションのみfelord保持していない @PreFilter(』 hasRoleも(「ADを「)またはfilterObject.startsWith(」F「)「) 4.4 @PostFilter 異なる@PreFilterと戻り値フィルタの発現に関連する戻り値に基づいています。注意してページング!このプロセスは、返されたデータ・インタフェースの前に発生します。関連テストと同様の@PreFilter、DEMOによって提供されたテキストの末尾を参照してください。
5。 あなたは@EnableGlobalMethodSecurityでtrueに設定されているsecuredEnabled場合、それは役割コメント@Securedを開き、注釈機能は、アクセス制御の決定のセット(デフォルトは接頭辞をROLE_必要です)デフォルトでは、唯一のロールベースのはるかに簡単です。
アノテーションメカニズムは、現在のユーザーの缶アクセスが保持しているロールのいずれかに含まれている(値)のセットの宣言の役割と同じ長さです。これは、非空の交差点の存在に注釈付きコレクションを@Securedユーザーの役割と役割のセットです。SPELは、式の決定の使用をサポートしていません。
6. jsr250Enabledは、 JavaEEの安全規則(今Jakartaプロジェクト)であるJSR-250のアノテーションのセキュリティ制御を、有効。5つのセキュリティアノテーションの合計。あなたjsr250Enabledが@EnableGlobalMethodSecurityでtrueに設定されている場合、それは、次の3つののJavaEEセキュリティアノテーションを開く:
すべてのアクセスを拒否し@DenyAll すべてのアクセスがあることに同意@PermitAll 用法及び5 @Secured同じを@RolesAllowed。 7.まとめ 今日、別のは、静的な構成に基づいて、春のセキュリティアノテーションを説明しました。柔軟に基づきjavaConfigの方法、より細かい粒度を比較すると、あなたはより強力なベースSPELの発現を達成することができます。しかし、プログラミングのこれら二つの方法は、静的な方法に基づいており、それはいくつかの制限があります。より柔軟なアプローチは、これは私たちが問題を解決しようとしている未来がある、ユーザーの役割とリソースの動的マッピングに対処する必要があります。この時までDEMO itheimaGZ GET:ほかのJavaの学習教材を心配することができます |