メソッドのセキュリティ

<method-security>

この要素は、Spring Security Bean のメソッドを保護するためのサポートを追加するための主要な手段です。メソッドは、アノテーション(インターフェースまたはクラスレベルで定義)を使用するか、ポイントカットのセットを定義することで保護できます。

<method-security> 属性

  • pre-post-enabled このアプリケーションコンテキストに対して Spring Security の呼び出し前および呼び出し後のアノテーション(@PreFilter、@PreAuthorize、@PostFilter、@PostAuthorize)を有効にします。デフォルトは "true" です。

  • secure-enabled このアプリケーションコンテキストに対して Spring Security の @Secured アノテーションを有効にします。デフォルトは "false" です。

  • jsr250-enabled このアプリケーションコンテキストの JSR-250 認証アノテーション(@RolesAllowed、@PermitAll、@DenyAll)を有効にします。デフォルトは "false" です。

  • mode "aspectj" に設定すると、AspectJ を使用してメソッド呼び出しをインターセプトします。

  • proxy-target-class true の場合、インターフェースベースのプロキシの代わりにクラスベースのプロキシが使用されます。デフォルトは "false" です。

  • security-context-holder-strategy- ref SecurityContext を取得するときに使用する SecurityContextHolderStrategy を指定します。デフォルトは、SecurityContextHolder.getContextHolderStrategy() によって返される値です。

  • 観察レジストリ参照 FilterChain および関連コンポーネントに使用される ObservationRegistry への参照

<method-security> の子要素

<global-method-security>

この要素は、Spring Security Bean のメソッドを保護するためのサポートを追加する主な手段です。メソッドは、アノテーション(インターフェースまたはクラスレベルで定義)を使用するか、AspectJ 構文を使用して一連のポイントカットを子要素として定義することで保護できます。

<global-method-security> の属性

  • access-decision-manager-ref メソッドセキュリティは、Web セキュリティと同じ AccessDecisionManager 構成を使用しますが、この属性を使用してこれをオーバーライドできます。デフォルトでは、AffirmativeBased 実装は RoleVoter および AuthenticatedVoter で使用されます。

  • authentication-manager-ref メソッドセキュリティに使用される AuthenticationManager への参照。

  • jsr250-annotations JSR-250 スタイル属性を使用するかどうかを指定します(たとえば、"RolesAllowed" )。これには、クラスパスに javax.annotation.security クラスが必要です。これを true に設定すると、Jsr250Voter が AccessDecisionManager に追加されるため、カスタム実装を使用していてこれらのアノテーションを使用する場合は、これを行う必要があります。

  • metadata-source-ref 他のソース(デフォルトのアノテーションなど)よりも優先される外部 MethodSecurityMetadataSource インスタンスを提供できます。

  • mode この属性を "aspectj" に設定して、デフォルトの Spring AOP の代わりに AspectJ を使用することを指定できます。protected メソッドは、spring-security-aspects モジュールの AnnotationSecurityAspect で織る必要があります。

AspectJ は、インターフェースのアノテーションは継承されないという Java のルールに従っていることに注意することが重要です。これは、インターフェースでセキュリティアノテーションを定義するメソッドが保護されないことを意味します。代わりに、AspectJ を使用するときにクラスに Security アノテーションを配置する必要があります。

  • order メソッドセキュリティインターセプタにアドバイス "order" を設定できます。

  • pre-post-annotations このアプリケーションコンテキストで Spring Security の事前およびリアクティブ呼び出しアノテーション(@PreFilter、@PreAuthorize、@PostFilter、@PostAuthorize)の使用を有効にするかどうかを指定します。デフォルトは「無効」です。

  • proxy-target-class true の場合、インターフェースベースのプロキシの代わりにクラスベースのプロキシが使用されます。

  • run-as-manager-ref 設定された MethodSecurityInterceptor によって使用されるオプションの RunAsManager 実装への参照

  • secure -annotations このアプリケーションコンテキストで Spring Security の @Secured アノテーションの使用を有効にするかどうかを指定します。デフォルトは「無効」です。

<after-invocation-provider>

この要素は、<global-method-security> 名前空間によって維持されるセキュリティインターセプターが使用するために AfterInvocationProvider を修飾するために使用できます。global-method-security 要素内でこれらの 0 個以上を定義でき、それぞれがアプリケーションコンテキスト内の AfterInvocationProvider Bean インスタンスを指す ref 属性を持ちます。

<after-invocation-provider> の親要素

<after-invocation-provider> 属性

  • ref AfterInvocationProvider を実装する Spring Bean への参照を定義します。

<pre-post-annotation-handling>

Spring Security の呼び出し前および呼び出し後のアノテーション(@PreFilter、@PreAuthorize、@PostFilter、@PostAuthorize)を処理するためのデフォルトの式ベースのメカニズムを完全に置き換えることができます。これらのアノテーションが有効な場合にのみ適用されます。

<pre-post-annotation-handling> の親要素

<invocation-attribute-factory>

アノテーション付きメソッドから事前呼び出しおよびリアクティブ呼び出しのメタデータを生成するために使用される PrePostInvocationAttributeFactory インスタンスを定義します。

<invocation-attribute-factory> の親要素

<invocation-attribute-factory> 属性

  • ref Spring Bean Id への参照を定義します。

<post-invocation-advice>

PostInvocationAdviceProvider を ref で PostInvocationAuthorizationAdvice としてカスタマイズして、<pre-post-annotation-handling> 素子。

<post-invocation-advice> の親要素

<post-invocation-advice> の属性

  • ref Spring Bean Id への参照を定義します。

<pre-invocation-advice>

PreInvocationAuthorizationAdviceVoter を ref で PreInvocationAuthorizationAdviceVoter としてカスタマイズして、<pre-post-annotation-handling> 素子。

<pre-invocation-advice> の親要素

<pre-invocation-advice> 属性

  • ref Spring Bean Id への参照を定義します。

メソッドの保護

<protect-pointcut>  @Secured アノテーションを使用して個々のメソッドまたはクラスベースでセキュリティ属性を定義するのではなく、<protect-pointcut> 要素を使用して、サービスレイヤーのメソッドおよびインターフェースのセット全体にわたって横断的セキュリティ制約を定義できます。名前空間の導入に例があります。

<protect-pointcut> の親要素

<protect-pointcut> の属性

  • access ポイントカットに一致するすべてのメソッドに適用されるアクセス構成属性リスト(例: "ROLE_A、ROLE_B")

  • expression execution キーワードを含む AspectJ 式。例: execution(int com.foo.TargetObject.countLength(String))

<intercept-methods>

Bean 定義内で使用して、セキュリティインターセプターを Bean に追加し、Bean のメソッドのアクセス構成属性を設定できます。

<intercept-methods> の属性

  • use-authorization- manager AccessDecisionManager の代わりに AuthorizationManager API を使用します (デフォルトは true)

  • authentication -manager-ref デフォルトの代わりに使用されるオプションの AuthorizationManager Bean ID (use-authorization-manager に取って代わります)

  • access-decision-manager-ref オプションの AccessDecisionManager Bean 作成されたメソッドセキュリティインターセプターによって使用される ID。

<intercept-methods> の子要素

<method-security-metadata-source>

MethodSecurityMetadataSource インスタンスを作成します

<method-security-metadata-source> の属性

  • id Bean 識別子。コンテキストの他の場所で Bean を参照するために使用されます。

  • use-expressions 構成属性の従来のリストではなく、<intercept-url> 要素の "access" 属性で式の使用を有効にします。デフォルトは "false" です。有効にした場合、各属性には単一のブール式を含める必要があります。式が "true" と評価されると、アクセスが許可されます。

<method-security-metadata-source> の子要素

<protect>

protected メソッドとそれに適用されるアクセス制御構成属性を定義します。"global-method-security" で提供されるサービスに "protect" 宣言を混在させないことを強くお勧めします。

<protect> 属性

  • access 「ROLE_A、ROLE_B」など、メソッドに適用されるアクセス構成属性リスト。

  • method メソッド名