クラス SwitchUserFilter
- 実装されたすべてのインターフェース:
jakarta.servlet.Filter
、org.springframework.beans.factory.Aware
、org.springframework.beans.factory.BeanNameAware
、org.springframework.beans.factory.DisposableBean
、org.springframework.beans.factory.InitializingBean
、org.springframework.context.ApplicationEventPublisherAware
、org.springframework.context.EnvironmentAware
、org.springframework.context.MessageSourceAware
、org.springframework.core.env.EnvironmentCapable
、org.springframework.web.context.ServletContextAware
このフィルターは、Spring セキュリティ管理 Web アプリケーションの Unix 'su' に似ています。この機能の一般的な使用例は、権限の高いユーザー(ROLE_ADMIN など)が通常のユーザー(ROLE_USER など)に切り替えられるようにする機能です。
このフィルターは、切り替えを実行するユーザーが通常どおり(つまり、ROLE_ADMIN ユーザーとして)ログインする必要があることを前提としています。その後、ユーザーはページ / コントローラーにアクセスして、管理者が自分がなりたい人を指定できるようにします(switchUserUrl
を参照)。
メモ: この URL には、そのロールのユーザーのみがアクセスできるように適切なセキュリティ制約を設定する必要があります(ROLE_ADMIN など)。
正常に切り替えられると、ユーザーの SecurityContext
は指定されたユーザーを反映するように更新され、元のユーザーを含む追加の SwitchUserGrantedAuthority
も含まれます。切り替える前に、ユーザーが現在切り替えられているかどうかのチェックが行われ、「入れ子」の切り替えを防ぐために現在のスイッチはすべて終了します。
ユーザーコンテキストから「終了」するには、ユーザーは ROLE_PREVIOUS_ADMINISTRATOR
で識別される元のユーザーに戻る URL(exitUserUrl
を参照)にアクセスする必要があります。
スイッチユーザー処理フィルターを構成するには、スイッチユーザー処理フィルターの Bean 定義を作成し、filterChainProxy に追加します。switchUserUrl に正しい制約を適用するには、フィルターがチェーンの FilterSecurityInteceptor の後にある必要があることに注意してください。例:
<bean id="switchUserProcessingFilter" class="org.springframework.security.web.authentication.switchuser.SwitchUserFilter"> <property name="userDetailsService" ref="userDetailsService" /> <property name="switchUserUrl" value="/login/impersonate" /> <property name="exitUserUrl" value="/logout/impersonate" /> <property name="targetUrl" value="/index.jsp" /> </bean>
フィールドサマリー
フィールド修飾子と型フィールド説明protected org.springframework.context.support.MessageSourceAccessor
static final StringSE
static final StringSE
クラス org.springframework.web.filter.GenericFilterBean から継承されたフィールド
logger
コンストラクターのサマリー
コンストラクターメソッドのサマリー
修飾子と型メソッド説明void
protected Authentication
attemptExitUser
(jakarta.servlet.http.HttpServletRequest request) すでに切り替えられたユーザーを終了しようとしました。protected Authentication
attemptSwitchUser
(jakarta.servlet.http.HttpServletRequest request) 別のユーザーに切り替えてみてください。void
doFilter
(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response, jakarta.servlet.FilterChain chain) protected boolean
requiresExitUser
(jakarta.servlet.http.HttpServletRequest request) リクエスト URI に exitUserUrl が存在するかどうかを確認します。protected boolean
requiresSwitchUser
(jakarta.servlet.http.HttpServletRequest request) リクエスト URI に switchUserUrl が存在するかどうかを確認します。void
setApplicationEventPublisher
(org.springframework.context.ApplicationEventPublisher eventPublisher) void
setAuthenticationDetailsSource
(AuthenticationDetailsSource<jakarta.servlet.http.HttpServletRequest, ?> authenticationDetailsSource) void
setExitUserMatcher
(RequestMatcher exitUserMatcher) 終了ユーザー処理に応答するようにマッチャーを設定します。void
setExitUserUrl
(StringSE exitUserUrl) 出口ユーザー処理に応答する URL を設定します。void
setFailureHandler
(AuthenticationFailureHandler failureHandler) スイッチが失敗したときのカスタム動作を定義するために使用されます。void
setMessageSource
(org.springframework.context.MessageSource messageSource) void
setSecurityContextHolderStrategy
(SecurityContextHolderStrategy securityContextHolderStrategy) 使用するSecurityContextHolderStrategy
を設定します。void
setSecurityContextRepository
(SecurityContextRepository securityContextRepository) ユーザーの切り替えが成功したときにSecurityContext
を保存するようにSecurityContextRepository
を設定します。void
setSuccessHandler
(AuthenticationSuccessHandler successHandler) 成功した切り替えまたは終了ユーザーでのカスタム動作を定義するために使用されます。void
setSwitchAuthorityRole
(StringSE switchAuthorityRole) switchAuthority のロールをカスタマイズできます。void
setSwitchFailureUrl
(StringSE switchFailureUrl) スイッチが失敗した場合にユーザーをリダイレクトする URL を設定します。void
setSwitchUserAuthorityChanger
(SwitchUserAuthorityChanger switchUserAuthorityChanger) void
setSwitchUserMatcher
(RequestMatcher switchUserMatcher) ユーザーの切り替え処理に応答するようにマッチャーを設定します。void
setSwitchUserUrl
(StringSE switchUserUrl) ユーザーの切り替え処理に応答する URL を設定します。void
setTargetUrl
(StringSE targetUrl) 切り替え / 終了ユーザーリクエストが成功した後に移動する URL を設定します。void
setUserDetailsChecker
(UserDetailsChecker userDetailsChecker) ユーザーが切り替わるたびにターゲットユーザーに呼び出されるUserDetailsChecker
を設定します。void
setUserDetailsService
(UserDetailsService userDetailsService) 認証データアクセスオブジェクトを設定します。void
setUsernameParameter
(StringSE usernameParameter) ユーザー名を含むパラメーターをカスタマイズできます。クラス org.springframework.web.filter.GenericFilterBean から継承されたメソッド
addRequiredProperty, createEnvironment, destroy, getEnvironment, getFilterConfig, getFilterName, getServletContext, init, initBeanWrapper, initFilterBean, setBeanName, setEnvironment, setServletContext
フィールドの詳細
コンストラクターの詳細
SwitchUserFilter
public SwitchUserFilter()
メソッドの詳細
afterPropertiesSet
public void afterPropertiesSet()- 次で指定:
- インターフェース
org.springframework.beans.factory.InitializingBean
のafterPropertiesSet
- オーバーライド:
- クラス
org.springframework.web.filter.GenericFilterBean
のafterPropertiesSet
doFilter
public void doFilter(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response, jakarta.servlet.FilterChain chain) throws IOExceptionSE, jakarta.servlet.ServletException - 次で指定:
- インターフェース
jakarta.servlet.Filter
のdoFilter
- 例外:
IOExceptionSE
jakarta.servlet.ServletException
attemptSwitchUser
protected Authentication attemptSwitchUser(jakarta.servlet.http.HttpServletRequest request) throws AuthenticationException 別のユーザーに切り替えてみてください。ユーザーが存在しないかアクティブでない場合は、null を返します。- 戻り値:
- 別のユーザーに正常に切り替えられた場合は新しい
Authentication
リクエスト、それ以外の場合はnull
。 - 例外:
UsernameNotFoundException
- 対象ユーザーが見つからない場合。LockedException
- アカウントがロックされている場合。DisabledException
- ターゲットユーザーが無効になっている場合。AccountExpiredException
- ターゲットユーザーアカウントの有効期限が切れている場合。CredentialsExpiredException
- ターゲットユーザーの資格情報が期限切れの場合。AuthenticationException
attemptExitUser
protected Authentication attemptExitUser(jakarta.servlet.http.HttpServletRequest request) throws AuthenticationCredentialsNotFoundException すでに切り替えられたユーザーを終了しようとしました。- パラメーター:
request
- HTTP サーブレットリクエスト- 戻り値:
- 元の
Authentication
オブジェクトまたはそれ以外の場合はnull
。 - 例外:
AuthenticationCredentialsNotFoundException
-Authentication
がこのリクエストに関連付けられていない場合。
requiresExitUser
protected boolean requiresExitUser(jakarta.servlet.http.HttpServletRequest request) リクエスト URI に exitUserUrl が存在するかどうかを確認します。- パラメーター:
request
- HTTP サーブレットリクエスト- 戻り値:
- リクエストに出口ユーザーが必要な場合は
true
、そうでない場合はfalse
。 - 関連事項:
requiresSwitchUser
protected boolean requiresSwitchUser(jakarta.servlet.http.HttpServletRequest request) リクエスト URI に switchUserUrl が存在するかどうかを確認します。- パラメーター:
request
- HTTP サーブレットリクエスト- 戻り値:
- リクエストに切り替えが必要な場合は
true
、そうでない場合はfalse
。 - 関連事項:
setApplicationEventPublisher
public void setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher eventPublisher) throws org.springframework.beans.BeansException - 次で指定:
- インターフェース
org.springframework.context.ApplicationEventPublisherAware
のsetApplicationEventPublisher
- 例外:
org.springframework.beans.BeansException
setAuthenticationDetailsSource
public void setAuthenticationDetailsSource(AuthenticationDetailsSource<jakarta.servlet.http.HttpServletRequest, ?> authenticationDetailsSource) setMessageSource
public void setMessageSource(org.springframework.context.MessageSource messageSource) - 次で指定:
- インターフェース
org.springframework.context.MessageSourceAware
のsetMessageSource
setUserDetailsService
認証データアクセスオブジェクトを設定します。- パラメーター:
userDetailsService
- 切り替えられるユーザーの情報をロードするために使用される UserDetailsService 。
setExitUserUrl
終了ユーザーの処理に応答するように URL を設定します。これはsetExitUserMatcher(RequestMatcher)
のショートカットです。- パラメーター:
exitUserUrl
- 出口ユーザーの URL。
setExitUserMatcher
終了ユーザー処理に応答するようにマッチャーを設定します。- パラメーター:
exitUserMatcher
- 使用する出口マッチャー。
setSwitchUserUrl
ユーザーの切り替え処理に応答する URL を設定します。これはsetSwitchUserMatcher(RequestMatcher)
のショートカットです- パラメーター:
switchUserUrl
- ユーザー切り替え URL。
setSwitchUserMatcher
ユーザーの切り替え処理に応答するようにマッチャーを設定します。- パラメーター:
switchUserMatcher
- ユーザー切り替えマッチャー。
setTargetUrl
切り替え / 終了ユーザーリクエストが成功した後に移動する URL を設定します。よりカスタマイズされた動作が必要な場合は、代わりにsetSuccessHandler
を使用してください。- パラメーター:
targetUrl
- ターゲット URL。
setSuccessHandler
成功した切り替えまたは終了ユーザーでのカスタム動作を定義するために使用されます。targetUrl を設定する代わりに使用できます。
setSwitchFailureUrl
スイッチが失敗した場合にユーザーをリダイレクトする URL を設定します。例: これは、切り替えようとしているアカウントが無効であるために発生する可能性があります(ユーザーが存在しない、アカウントがロックされているなど)。設定されていない場合、エラーメッセージがレスポンスに書き込まれます。
よりカスタマイズされた動作が必要な場合は、代わりに
failureHandler
を使用してください。- パラメーター:
switchFailureUrl
- リダイレクト先の URL。
setFailureHandler
スイッチが失敗したときのカスタム動作を定義するために使用されます。switchFailureUrl を設定する代わりに使用できます。
setSwitchUserAuthorityChanger
- パラメーター:
switchUserAuthorityChanger
- サブクラスに付与された権限を微調整するために使用する (SwitchUserFilter が権限を微調整してはならない場合は null)
setUserDetailsChecker
ユーザーが切り替わるたびにターゲットユーザーに呼び出されるUserDetailsChecker
を設定します。- パラメーター:
userDetailsChecker
- 切り替えられるユーザーのステータスをチェックするUserDetailsChecker
。デフォルトはAccountStatusUserDetailsChecker
です。
setUsernameParameter
ユーザー名を含むパラメーターをカスタマイズできます。- パラメーター:
usernameParameter
- パラメーター名。デフォルトはusername
setSwitchAuthorityRole
switchAuthority のロールをカスタマイズできます。- パラメーター:
switchAuthorityRole
- ロール名。デフォルトはROLE_PREVIOUS_ADMINISTRATOR
setSecurityContextHolderStrategy
public void setSecurityContextHolderStrategy(SecurityContextHolderStrategy securityContextHolderStrategy) 使用するSecurityContextHolderStrategy
を設定します。デフォルトのアクションは、SecurityContextHolder
に格納されているSecurityContextHolderStrategy
を使用することです。- 導入:
- 5.8
setSecurityContextRepository
ユーザーの切り替えが成功したときにSecurityContext
を保存するようにSecurityContextRepository
を設定します。デフォルトはRequestAttributeSecurityContextRepository
です。- パラメーター:
securityContextRepository
- 使用するSecurityContextRepository
。null にはできません。- 導入:
- 5.7.7