クラス HttpSessionSecurityContextRepository

  • 実装されたすべてのインターフェース:
    SecurityContextRepository

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

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

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

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

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

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

    導入:
    3.0
    • フィールドサマリー

      フィールド  
      修飾子と型 フィールド 説明
      protected org.apache.commons.logging.Loglogger
      static java.lang.StringSPRING_SECURITY_CONTEXT_KEY
      セキュリティコンテキストがセッションに格納されるデフォルトのキー。
    • メソッドのサマリー

      すべてのメソッド   インスタンスメソッド   具象メソッド  
      修飾子と型 メソッド 説明
      booleancontainsContext​(javax.servlet.http.HttpServletRequest request)
      リポジトリに現在のリクエストのセキュリティコンテキストが含まれているかどうかを問い合わせることができます。
      protected SecurityContextgenerateNewContext()
      デフォルトでは、SecurityContextHolder.createEmptyContext() を呼び出して新しいコンテキストを取得します(このメソッドが呼び出されたとき、ホルダーにコンテキストが存在していてはいけません)。
      SecurityContextloadContext​(HttpRequestResponseHolder requestResponseHolder)
      現在のリクエストのセキュリティコンテキストを取得し(利用可能な場合)、それを返します。
      voidsaveContext​(SecurityContext context, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
      リクエストの補完時にセキュリティコンテキストを格納します。
      voidsetAllowSessionCreation​(boolean allowSessionCreation)
      true(デフォルト)に設定すると、その内容がデフォルトの空のコンテキスト値と異なると判断された場合、セキュリティコンテキストを格納するためにセッションが作成されます(必要な場合)。
      voidsetDisableUrlRewriting​(boolean disableUrlRewriting)
      URL でのセッション識別子の使用を無効にすることができます。
      voidsetSpringSecurityContextKey​(java.lang.String springSecurityContextKey)
      セッション属性名をこのリポジトリインスタンス用にカスタマイズできます。
      voidsetTrustResolver​(AuthenticationTrustResolver trustResolver)
      使用する AuthenticationTrustResolver を設定します。
      • クラス java.lang.Object から継承されたメソッド

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • フィールドの詳細

      • SPRING_SECURITY_CONTEXT_KEY

        public static final java.lang.String 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 になることはありません。
      • saveContext

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

        public boolean containsContext​(javax.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​(java.lang.String springSecurityContextKey)
        セッション属性名をこのリポジトリインスタンス用にカスタマイズできます。
        パラメーター:
        springSecurityContextKey - セキュリティコンテキストが格納されるキー。デフォルトは SPRING_SECURITY_CONTEXT_KEY です。