クラス HttpSessionSecurityContextRepository

java.lang.ObjectSE
org.springframework.security.web.context.HttpSessionSecurityContextRepository
実装されたすべてのインターフェース:
SecurityContextRepository

public class HttpSessionSecurityContextRepository extends ObjectSE implements SecurityContextRepository
リクエスト間の HttpSession にセキュリティコンテキストを格納する SecurityContextRepository 実装。

HttpSession が照会され、 loadContext メソッドで SecurityContext を取得します(デフォルトではキー SPRING_SECURITY_CONTEXT_KEY を使用)。何らかの理由で HttpSession から有効な SecurityContext を取得できない場合、SecurityContextHolder.createEmptyContext() を呼び出すことによって新しい SecurityContext が作成され、代わりにこのインスタンスが返されます。

saveContext が呼び出されると、コンテキストは同じキーに保存され、提供されます

  1. 値が変更されました
  2. 構成された AuthenticationTrustResolver は、コンテンツが匿名ユーザーであることを報告しません

標準構成では、HttpSession が存在しない場合、loadContext 中に HttpSession は作成されません。saveContext が Web リクエストの最後に呼び出され、セッションが存在しない場合、新しい HttpSession は、指定された SecurityContext が空の SecurityContext インスタンスと等しくない場合にのみ作成されます。これにより、不要な HttpSession の作成が回避されますが、リクエスト中にコンテキストに加えられた変更の保存が自動化されます。SecurityContextPersistenceFilter が積極的にセッションを作成するように構成されている場合、ここで適用されるセッション最小化ロジックは何の違いも生じないことに注意してください。先行したセッション作成を使用している場合は、このクラスの allowSessionCreation プロパティが true (デフォルト)に設定されていることを確認する必要があります。

何らかの理由で何 HttpSession が今まで (たとえば、基本認証が使用されるか、同じ jsessionid を提示することはありません同様のクライアントされている場合)が作成されるべきでない場合には、allowSessionCreation は false に設定する必要があります。サーバーメモリを節約し、SecurityContextHolder を使用するすべてのクラスが Web リクエスト間で SecurityContext の永続性を持たないように設計されていることを確認する必要がある場合にのみ、これを行ってください。

導入:
3.0
  • フィールドの詳細

    • SPRING_SECURITY_CONTEXT_KEY

      public static final StringSE SPRING_SECURITY_CONTEXT_KEY
      セキュリティコンテキストがセッションに格納されるデフォルトのキー。
      関連事項:
    • logger

      protected final org.apache.commons.logging.Log logger
  • コンストラクターの詳細

    • HttpSessionSecurityContextRepository

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

    • loadContext

      public SecurityContext loadContext(HttpRequestResponseHolder requestResponseHolder)
      現在のリクエストのセキュリティコンテキストを取得し(利用可能な場合)、それを返します。

      セッションが null の場合、コンテキストオブジェクトが null の場合、セッションに格納されているコンテキストオブジェクトが SecurityContext のインスタンスでない場合は、新しいコンテキストオブジェクトが生成されて返されます。

      次で指定:
      インターフェース SecurityContextRepositoryloadContext 
      パラメーター:
      requestResponseHolder - コンテキストをロードする必要がある現在のリクエストとレスポンスのホルダー。
      戻り値:
      現在のリクエストに使用されるセキュリティコンテキスト。null になることはありません。
    • loadDeferredContext

      public DeferredSecurityContext loadDeferredContext(jakarta.servlet.http.HttpServletRequest request)
      インターフェースからコピーされた説明: SecurityContextRepository
      アプリケーションで必要になるまで、HttpServletRequest を使用した SecurityContext のロードを延期します。
      次で指定:
      インターフェース SecurityContextRepositoryloadDeferredContext 
      パラメーター:
      request - SecurityContext をロードする HttpServletRequest 
      戻り値:
      null にできない SecurityContext を返す DeferredSecurityContext
    • saveContext

      public void saveContext(SecurityContext context, jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response)
      インターフェースからコピーされた説明: SecurityContextRepository
      リクエストの補完時にセキュリティコンテキストを格納します。
      次で指定:
      インターフェース SecurityContextRepositorysaveContext 
      パラメーター:
      context - ホルダーから取得された null 以外のコンテキスト。
    • containsContext

      public boolean containsContext(jakarta.servlet.http.HttpServletRequest request)
      インターフェースからコピーされた説明: SecurityContextRepository
      リポジトリに現在のリクエストのセキュリティコンテキストが含まれているかどうかを問い合わせることができます。
      次で指定:
      インターフェース SecurityContextRepositorycontainsContext 
      パラメーター:
      request - 現在のリクエスト
      戻り値:
      リクエストのコンテキストが見つかった場合は true、そうでない場合は false
    • generateNewContext

      protected SecurityContext generateNewContext()
      デフォルトでは、SecurityContextHolder.createEmptyContext() を呼び出して新しいコンテキストを取得します(このメソッドが呼び出されたとき、ホルダーにコンテキストが存在していてはいけません)。このアプローチを使用して、コンテキスト作成戦略は使用中の SecurityContextHolderStrategy によって決定されます。デフォルトの実装は、新しい SecurityContextImpl を返します。
      戻り値:
      新しい SecurityContext インスタンス。非 null。
    • setAllowSessionCreation

      public void setAllowSessionCreation(boolean allowSessionCreation)
      true(デフォルト)に設定すると、その内容がデフォルトの空のコンテキスト値と異なると判断された場合、セキュリティコンテキストを格納するためにセッションが作成されます(必要な場合)。

      このフラグを false に設定しても、このクラスがセキュリティコンテキストを格納することを妨げないことに注意してください。アプリケーション(または別のフィルター)がセッションを作成する場合、認証されたユーザーのセキュリティコンテキストは引き続き保存されます。

      パラメーター:
      allowSessionCreation -
    • setDisableUrlRewriting

      public void setDisableUrlRewriting(boolean disableUrlRewriting)
      URL でのセッション識別子の使用を無効にすることができます。デフォルトではオフです。
      パラメーター:
      disableUrlRewriting - true に設定すると、レスポンスラッパーの URL エンコード方式が無効になり、 jsessionid パラメーターが使用されなくなります。
    • setSpringSecurityContextKey

      public void setSpringSecurityContextKey(StringSE springSecurityContextKey)
      セッション属性名をこのリポジトリインスタンス用にカスタマイズできます。
      パラメーター:
      springSecurityContextKey - セキュリティコンテキストが格納されるキー。デフォルトは SPRING_SECURITY_CONTEXT_KEY です。
    • setSecurityContextHolderStrategy

      public void setSecurityContextHolderStrategy(SecurityContextHolderStrategy strategy)
      使用する SecurityContextHolderStrategy を設定します。デフォルトのアクションは、SecurityContextHolder に格納されている SecurityContextHolderStrategy を使用することです。
      導入:
      5.8
    • setTrustResolver

      public void setTrustResolver(AuthenticationTrustResolver trustResolver)
      使用する AuthenticationTrustResolver を設定します。デフォルトは AuthenticationTrustResolverImpl です。
      パラメーター:
      trustResolver - 使用する AuthenticationTrustResolver。null にはできません。