クラス SwitchUserWebFilter

  • 実装されたすべてのインターフェース:
    org.springframework.web.server.WebFilter

    public class SwitchUserWebFilter
    extends java.lang.Object
    implements org.springframework.web.server.WebFilter
    ユーザーコンテキストの切り替えを担当するユーザー処理フィルターを切り替えます。この機能の一般的な使用例は、権限の高いユーザー(ROLE_ADMIN など)が通常のユーザー(ROLE_USER など)に切り替えられるようにする機能です。

    このフィルターは、切り替えを実行するユーザーが通常のユーザーとして(つまり、ROLE_ADMIN ロールを使用して)ログインする必要があることを前提としています。次に、ユーザーは、管理者が誰になりたいかを指定できるページ / コントローラーにアクセスします(switchUserUrl を参照)。

    メモ: この URL には、そのロールのユーザーのみがアクセスできるように適切なセキュリティ制約を設定する必要があります(ROLE_ADMIN など)。

    正常に切り替えられると、ユーザーの SecurityContext は指定されたユーザーを反映するように更新され、元のユーザーを含む追加の SwitchUserGrantedAuthority も含まれます。切り替える前に、ユーザーが現在切り替えられているかどうかのチェックが行われ、「入れ子」の切り替えを防ぐために現在のスイッチはすべて終了します。

    ユーザーコンテキストから「終了」するには、ユーザーは ROLE_PREVIOUS_ADMINISTRATOR で識別される元のユーザーに戻る URL(exitUserUrl を参照)にアクセスする必要があります。

    スイッチユーザー処理フィルターを構成するには、スイッチユーザー処理フィルターの Bean 定義作成し、filterChainProxy に追加します。switchUserUrl に正しい制約を適用するには、フィルターが チェーンの SecurityWebFiltersOrder.AUTHORIZATION の後にある必要があることに注意してください。例:

     SwitchUserWebFilter filter = new SwitchUserWebFilter(userDetailsService, loginSuccessHandler, failureHandler);
     http.addFilterAfter(filter, SecurityWebFiltersOrder.AUTHORIZATION);
     
    導入:
    5.4
    関連事項:
    SwitchUserGrantedAuthority
    • フィールドの詳細

      • SPRING_SECURITY_SWITCH_USERNAME_KEY

        public static final java.lang.String SPRING_SECURITY_SWITCH_USERNAME_KEY
        関連事項:
        定数フィールド値
      • ROLE_PREVIOUS_ADMINISTRATOR

        public static final java.lang.String ROLE_PREVIOUS_ADMINISTRATOR
        関連事項:
        定数フィールド値
    • コンストラクターの詳細

      • SwitchUserWebFilter

        public SwitchUserWebFilter​(ReactiveUserDetailsService userDetailsService,
                                   ServerAuthenticationSuccessHandler successHandler,
                                   @Nullable
                                   ServerAuthenticationFailureHandler failureHandler)
        ユーザーコンテキスト切り替え用のフィルターを作成します
        パラメーター:
        userDetailsService - 切り替えられるユーザーの情報をロードするために使用される UserDetailsService
        successHandler - 成功した切り替えまたは終了ユーザーでのカスタム動作を定義するために使用されます。
        failureHandler - スイッチが失敗したときのカスタム動作を定義するために使用されます。
      • SwitchUserWebFilter

        public SwitchUserWebFilter​(ReactiveUserDetailsService userDetailsService,
                                   java.lang.String successTargetUrl,
                                   @Nullable
                                   java.lang.String failureTargetUrl)
        ユーザーコンテキスト切り替え用のフィルターを作成します
        パラメーター:
        userDetailsService - 切り替えられるユーザーの情報をロードするために使用される UserDetailsService
        successTargetUrl - ユーザーの切り替え / 終了リクエストが成功した後に移動する URL を設定します
        failureTargetUrl - 切り替えに失敗した場合にユーザーがリダイレクトされる URL
    • メソッドの詳細

      • filter

        public reactor.core.publisher.Mono<java.lang.Void> filter​(org.springframework.web.server.ServerWebExchange exchange,
                                                                  org.springframework.web.server.WebFilterChain chain)
        次で指定:
        インターフェース org.springframework.web.server.WebFilterfilter 
      • switchUser

        protected reactor.core.publisher.Mono<Authentication> switchUser​(WebFilterExchange webFilterExchange)
        別のユーザーに切り替えてみてください。
        パラメーター:
        webFilterExchange - Web フィルター交換
        戻り値:
        別のユーザーに正常に切り替えられた場合は新しい Authentication オブジェクト、それ以外の場合は Mono.empty()
        例外:
        AuthenticationCredentialsNotFoundException - ターゲットユーザーがユーザー名で見つからない場合
      • exitSwitchUser

        protected reactor.core.publisher.Mono<Authentication> exitSwitchUser​(WebFilterExchange webFilterExchange)
        すでに切り替えられたユーザーを終了しようとしました。
        パラメーター:
        webFilterExchange - Web フィルター交換
        戻り値:
        元の Authentication オブジェクト。
        例外:
        AuthenticationCredentialsNotFoundException - このリクエストに関連付けられた Authentication がない場合、またはユーザーが切り替えられない場合。
      • getUsername

        protected java.lang.String getUsername​(org.springframework.web.server.ServerWebExchange exchange)
        ターゲットユーザーの名前を返します。
        パラメーター:
        exchange - サーバーの Web 交換
        戻り値:
        ターゲットユーザーの名前。
      • setExitUserUrl

        public void setExitUserUrl​(java.lang.String exitUserUrl)
        終了ユーザーの処理に応答するように URL を設定します。これは * setExitUserMatcher(ServerWebExchangeMatcher) のショートカットです
        パラメーター:
        exitUserUrl - 出口ユーザーの URL。
      • setExitUserMatcher

        public void setExitUserMatcher​(ServerWebExchangeMatcher exitUserMatcher)
        終了ユーザー処理に応答するようにマッチャーを設定します。
        パラメーター:
        exitUserMatcher - 使用する出口マッチャー
      • setSwitchUserUrl

        public void setSwitchUserUrl​(java.lang.String switchUserUrl)
        ユーザーの切り替え処理に応答する URL を設定します。これは setSwitchUserMatcher(ServerWebExchangeMatcher) のショートカットです
        パラメーター:
        switchUserUrl - ユーザー切り替え URL。
      • setSwitchUserMatcher

        public void setSwitchUserMatcher​(ServerWebExchangeMatcher switchUserMatcher)
        ユーザーの切り替え処理に応答するようにマッチャーを設定します。
        パラメーター:
        switchUserMatcher - ユーザー切り替えマッチャー。