クラス SecurityContextHolder

java.lang.ObjectSE
org.springframework.security.core.context.SecurityContextHolder

public class SecurityContextHolder extends ObjectSE
指定された SecurityContext を現在の実行スレッドに関連付けます。

このクラスは、SecurityContextHolderStrategy のインスタンスに委譲する一連の静的メソッドを提供します。クラスの目的は、特定の JVM に使用する必要がある戦略を指定する便利な方法を提供することです。このクラスのすべてが static であるため、これは JVM 全体の設定です。これにより、コードを簡単に呼び出すことができます。

使用する戦略を指定するには、モード設定を指定する必要があります。モード設定は、static final フィールドとして定義された 3 つの有効な MODE_ 設定の 1 つ、または引数なしの public コンストラクターを提供する SecurityContextHolderStrategy の具体的な実装の完全修飾クラス名です。

目的の戦略モード String を指定するには、2 つの方法があります。1 つは、SYSTEM_PROPERTY にキー設定されたシステムプロパティを介して指定することです。2 つ目は、クラスを使用する前に setStrategyName(String) を呼び出すことです。どちらのアプローチも使用しない場合、クラスはデフォルトで MODE_THREADLOCAL を使用します。これは下位互換性があり、JVM の非互換性が少なく、サーバー上で適切です(MODE_GLOBAL はサーバーの使用には明らかに不適切です)。

  • フィールドの詳細

  • コンストラクターの詳細

    • SecurityContextHolder

      public SecurityContextHolder()
  • メソッドの詳細

    • clearContext

      public static void clearContext()
      現在のスレッドからコンテキスト値を明示的にクリアします。
    • getContext

      public static SecurityContext getContext()
      現在の SecurityContext を取得します。
      戻り値:
      セキュリティコンテキスト (非 null)
    • getDeferredContext

      public static SupplierSE<SecurityContext> getDeferredContext()
      現在のコンテキストを返す SupplierSE を取得します。
      戻り値:
      現在のコンテキストを返す SupplierSE (決して null - 必要に応じてデフォルトの実装を作成します)
      導入:
      5.8
    • getInitializeCount

      public static int getInitializeCount()
      主にトラブルシューティングの目的で、このメソッドは、クラスが SecurityContextHolderStrategy を再初期化した回数を示します。
      戻り値:
      カウント(代替戦略に切り替えるために setStrategyName(String) または setContextHolderStrategy(SecurityContextHolderStrategy) を呼び出していない限り、1 である必要があります)。
    • setContext

      public static void setContext(SecurityContext context)
      新しい SecurityContext を現在の実行スレッドに関連付けます。
      パラメーター:
      context - 新しい SecurityContext (null でない可能性があります)
    • setDeferredContext

      public static void setDeferredContext(SupplierSE<SecurityContext> deferredContext)
      現在のコンテキストを返す SupplierSE を設定します。実装は、デフォルトをオーバーライドして、Supplier.get() の呼び出しを回避できます。
      パラメーター:
      deferredContext - SecurityContext を返す SupplierSE
      導入:
      5.8
    • setStrategyName

      public static void setStrategyName(StringSE strategyName)
      優先戦略を変更します。特定の JVM に対してこのメソッドを複数回呼び出さないでください。このメソッドは、戦略を再初期化し、古い戦略を使用している既存のスレッドに悪影響を及ぼします。
      パラメーター:
      strategyName - 使用する戦略の完全修飾クラス名。
    • setContextHolderStrategy

      public static void setContextHolderStrategy(SecurityContextHolderStrategy strategy)
      この SecurityContextHolderStrategy を使用してください。setStrategyName(String) またはこのメソッドのいずれかを呼び出しますが、両方を呼び出すことはできません。このメソッドはスレッドセーフではありません。リクエストの処理中に戦略を変更すると、競合状態が発生する可能性があります。SecurityContextHolder は、提供された SecurityContextHolderStrategy への静的参照を維持します。これは、ストラテジーを削除するまで、ストラテジーとそのメンバーがガベージコレクションされないことを意味します。ガベージコレクションを確実に行うには、次のような元の戦略を覚えておいてください。
           SecurityContextHolderStrategy original = SecurityContextHolder.getContextHolderStrategy();
           SecurityContextHolder.setContextHolderStrategy(myStrategy);
       
      そして、myStrategy をガベージコレクションする準備ができたら、次のことができます。
           SecurityContextHolder.setContextHolderStrategy(original);
       
      パラメーター:
      strategy - 使用する SecurityContextHolderStrategy
      導入:
      5.6
    • getContextHolderStrategy

      public static SecurityContextHolderStrategy getContextHolderStrategy()
      コンテキスト戦略を取得できます。SEC-1188 を参照してください。
      戻り値:
      セキュリティコンテキストを格納するための構成済みの戦略
    • createEmptyContext

      public static SecurityContext createEmptyContext()
      新しい空のコンテキストの作成を構成済みの戦略に委譲します。
    • toString

      public StringSE toString()
      オーバーライド:
      クラス ObjectSEtoString