クラス SwitchUserWebFilter
- java.lang.Object
-
- org.springframework.security.web.server.authentication.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
フィールドサマリー
フィールド 修飾子と型 フィールド 説明 static java.lang.String
ROLE_PREVIOUS_ADMINISTRATOR
static java.lang.String
SPRING_SECURITY_SWITCH_USERNAME_KEY
コンストラクターのサマリー
コンストラクター コンストラクター 説明 SwitchUserWebFilter(ReactiveUserDetailsService userDetailsService, java.lang.String successTargetUrl, java.lang.String failureTargetUrl)
ユーザーコンテキスト切り替え用のフィルターを作成しますSwitchUserWebFilter(ReactiveUserDetailsService userDetailsService, ServerAuthenticationSuccessHandler successHandler, ServerAuthenticationFailureHandler failureHandler)
ユーザーコンテキスト切り替え用のフィルターを作成します
メソッドのサマリー
すべてのメソッド インスタンスメソッド 具象メソッド 修飾子と型 メソッド 説明 protected reactor.core.publisher.Mono<Authentication>
exitSwitchUser(WebFilterExchange webFilterExchange)
すでに切り替えられたユーザーを終了しようとしました。reactor.core.publisher.Mono<java.lang.Void>
filter(org.springframework.web.server.ServerWebExchange exchange, org.springframework.web.server.WebFilterChain chain)
protected java.lang.String
getUsername(org.springframework.web.server.ServerWebExchange exchange)
ターゲットユーザーの名前を返します。void
setExitUserMatcher(ServerWebExchangeMatcher exitUserMatcher)
終了ユーザー処理に応答するようにマッチャーを設定します。void
setExitUserUrl(java.lang.String exitUserUrl)
出口ユーザー処理に応答する URL を設定します。void
setSecurityContextRepository(ServerSecurityContextRepository securityContextRepository)
SecurityContext を永続化するためのリポジトリを設定します。void
setSwitchUserMatcher(ServerWebExchangeMatcher switchUserMatcher)
ユーザーの切り替え処理に応答するようにマッチャーを設定します。void
setSwitchUserUrl(java.lang.String 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, 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.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
protected java.lang.String getUsername(org.springframework.web.server.ServerWebExchange exchange)
ターゲットユーザーの名前を返します。- パラメーター:
exchange
- サーバーの Web 交換- 戻り値:
- ターゲットユーザーの名前。
setSecurityContextRepository
public void setSecurityContextRepository(ServerSecurityContextRepository securityContextRepository)
SecurityContext を永続化するためのリポジトリを設定します。デフォルトはWebSessionServerSecurityContextRepository
です- パラメーター:
securityContextRepository
- 使用するリポジトリ
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
- ユーザー切り替えマッチャー。