クラス SwitchUserWebFilter
java.lang.ObjectSE
org.springframework.security.web.server.authentication.SwitchUserWebFilter
- 実装されたすべてのインターフェース:
org.springframework.web.server.WebFilter
public class SwitchUserWebFilter
extends ObjectSE
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
- 関連事項:
フィールドサマリー
フィールドコンストラクターのサマリー
コンストラクターコンストラクター説明SwitchUserWebFilter
(ReactiveUserDetailsService userDetailsService, StringSE successTargetUrl, StringSE failureTargetUrl) ユーザーコンテキスト切り替え用のフィルターを作成しますSwitchUserWebFilter
(ReactiveUserDetailsService userDetailsService, ServerAuthenticationSuccessHandler successHandler, ServerAuthenticationFailureHandler failureHandler) ユーザーコンテキスト切り替え用のフィルターを作成しますメソッドのサマリー
修飾子と型メソッド説明protected reactor.core.publisher.Mono<Authentication>
exitSwitchUser
(WebFilterExchange webFilterExchange) すでに切り替えられたユーザーを終了しようとしました。reactor.core.publisher.Mono<VoidSE>
filter
(org.springframework.web.server.ServerWebExchange exchange, org.springframework.web.server.WebFilterChain chain) protected StringSE
getUsername
(org.springframework.web.server.ServerWebExchange exchange) ターゲットユーザーの名前を返します。void
setExitUserMatcher
(ServerWebExchangeMatcher exitUserMatcher) 終了ユーザー処理に応答するようにマッチャーを設定します。void
setExitUserUrl
(StringSE exitUserUrl) 出口ユーザー処理に応答する URL を設定します。void
setSecurityContextRepository
(ServerSecurityContextRepository securityContextRepository) SecurityContext を永続化するためのリポジトリを設定します。void
setSwitchUserMatcher
(ServerWebExchangeMatcher switchUserMatcher) ユーザーの切り替え処理に応答するようにマッチャーを設定します。void
setSwitchUserUrl
(StringSE switchUserUrl) ユーザーの切り替え処理に応答する URL を設定します。protected reactor.core.publisher.Mono<Authentication>
switchUser
(WebFilterExchange webFilterExchange) 別のユーザーに切り替えてみてください。
フィールドの詳細
コンストラクターの詳細
SwitchUserWebFilter
public SwitchUserWebFilter(ReactiveUserDetailsService userDetailsService, ServerAuthenticationSuccessHandler successHandler, @Nullable ServerAuthenticationFailureHandler failureHandler) ユーザーコンテキスト切り替え用のフィルターを作成します- パラメーター:
userDetailsService
- 切り替えられるユーザーの情報をロードするために使用される UserDetailsService 。successHandler
- 成功した切り替えまたは終了ユーザーでのカスタム動作を定義するために使用されます。failureHandler
- スイッチが失敗したときのカスタム動作を定義するために使用されます。
SwitchUserWebFilter
public SwitchUserWebFilter(ReactiveUserDetailsService userDetailsService, StringSE successTargetUrl, @Nullable StringSE failureTargetUrl) ユーザーコンテキスト切り替え用のフィルターを作成します- パラメーター:
userDetailsService
- 切り替えられるユーザーの情報をロードするために使用される UserDetailsService 。successTargetUrl
- ユーザーの切り替え / 終了リクエストが成功した後に移動する URL を設定しますfailureTargetUrl
- 切り替えに失敗した場合にユーザーがリダイレクトされる URL
メソッドの詳細
filter
public reactor.core.publisher.Mono<VoidSE> filter(org.springframework.web.server.ServerWebExchange exchange, org.springframework.web.server.WebFilterChain chain) - 次で指定:
- インターフェース
org.springframework.web.server.WebFilter
のfilter
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
ターゲットユーザーの名前を返します。- パラメーター:
exchange
- サーバーの Web 交換- 戻り値:
- ターゲットユーザーの名前。
setSecurityContextRepository
SecurityContext を永続化するためのリポジトリを設定します。デフォルトはWebSessionServerSecurityContextRepository
です- パラメーター:
securityContextRepository
- 使用するリポジトリ
setExitUserUrl
終了ユーザーの処理に応答するように URL を設定します。これは *setExitUserMatcher(ServerWebExchangeMatcher)
のショートカットです- パラメーター:
exitUserUrl
- 出口ユーザーの URL。
setExitUserMatcher
終了ユーザー処理に応答するようにマッチャーを設定します。- パラメーター:
exitUserMatcher
- 使用する出口マッチャー
setSwitchUserUrl
ユーザーの切り替え処理に応答する URL を設定します。これはsetSwitchUserMatcher(ServerWebExchangeMatcher)
のショートカットです- パラメーター:
switchUserUrl
- ユーザー切り替え URL。
setSwitchUserMatcher
ユーザーの切り替え処理に応答するようにマッチャーを設定します。- パラメーター:
switchUserMatcher
- ユーザー切り替えマッチャー。