クラス SwitchUserFilter
- java.lang.Object
-
- org.springframework.web.filter.GenericFilterBean
-
- org.springframework.security.web.authentication.switchuser.SwitchUserFilter
- 実装されたすべてのインターフェース:
javax.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
public class SwitchUserFilter extends org.springframework.web.filter.GenericFilterBean implements org.springframework.context.ApplicationEventPublisherAware, org.springframework.context.MessageSourceAware
ユーザーコンテキストの切り替えを担当するユーザー処理フィルターを切り替えます。このフィルターは、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
messages
static java.lang.String
ROLE_PREVIOUS_ADMINISTRATOR
static java.lang.String
SPRING_SECURITY_SWITCH_USERNAME_KEY
コンストラクターのサマリー
コンストラクター コンストラクター 説明 SwitchUserFilter()
メソッドのサマリー
すべてのメソッド インスタンスメソッド 具象メソッド 修飾子と型 メソッド 説明 void
afterPropertiesSet()
protected Authentication
attemptExitUser(javax.servlet.http.HttpServletRequest request)
すでに切り替えられたユーザーを終了しようとしました。protected Authentication
attemptSwitchUser(javax.servlet.http.HttpServletRequest request)
別のユーザーに切り替えてみてください。void
doFilter(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response, javax.servlet.FilterChain chain)
protected boolean
requiresExitUser(javax.servlet.http.HttpServletRequest request)
exitUserUrl の存在についてリクエスト URI をチェックします。protected boolean
requiresSwitchUser(javax.servlet.http.HttpServletRequest request)
switchUserUrl の存在についてリクエスト URI を確認します。void
setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher eventPublisher)
void
setAuthenticationDetailsSource(AuthenticationDetailsSource<javax.servlet.http.HttpServletRequest,?> authenticationDetailsSource)
void
setExitUserMatcher(RequestMatcher exitUserMatcher)
終了ユーザー処理に応答するようにマッチャーを設定します。void
setExitUserUrl(java.lang.String exitUserUrl)
出口ユーザー処理に応答する URL を設定します。void
setFailureHandler(AuthenticationFailureHandler failureHandler)
スイッチが失敗したときのカスタム動作を定義するために使用されます。void
setMessageSource(org.springframework.context.MessageSource messageSource)
void
setSuccessHandler(AuthenticationSuccessHandler successHandler)
成功した切り替えまたは終了ユーザーでのカスタム動作を定義するために使用されます。void
setSwitchAuthorityRole(java.lang.String switchAuthorityRole)
switchAuthority のロールをカスタマイズできます。void
setSwitchFailureUrl(java.lang.String switchFailureUrl)
スイッチが失敗した場合にユーザーをリダイレクトする URL を設定します。void
setSwitchUserAuthorityChanger(SwitchUserAuthorityChanger switchUserAuthorityChanger)
void
setSwitchUserMatcher(RequestMatcher switchUserMatcher)
ユーザーの切り替え処理に応答するようにマッチャーを設定します。void
setSwitchUserUrl(java.lang.String switchUserUrl)
ユーザーの切り替え処理に応答する URL を設定します。void
setTargetUrl(java.lang.String targetUrl)
切り替え / 終了ユーザーリクエストが成功した後に移動する URL を設定します。void
setUserDetailsChecker(UserDetailsChecker userDetailsChecker)
ユーザーが切り替わるたびにターゲットユーザーに呼び出されるUserDetailsChecker
を設定します。void
setUserDetailsService(UserDetailsService userDetailsService)
認証データアクセスオブジェクトを設定します。void
setUsernameParameter(java.lang.String usernameParameter)
ユーザー名を含むパラメーターをカスタマイズできます。
フィールドの詳細
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
- 関連事項:
- 定数フィールド値
messages
protected org.springframework.context.support.MessageSourceAccessor messages
メソッドの詳細
afterPropertiesSet
public void afterPropertiesSet()
- 次で指定:
- インターフェース
org.springframework.beans.factory.InitializingBean
のafterPropertiesSet
- オーバーライド:
- クラス
org.springframework.web.filter.GenericFilterBean
のafterPropertiesSet
doFilter
public void doFilter(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response, javax.servlet.FilterChain chain) throws java.io.IOException, javax.servlet.ServletException
- 次で指定:
- インターフェース
javax.servlet.Filter
のdoFilter
- 例外:
java.io.IOException
javax.servlet.ServletException
attemptSwitchUser
protected Authentication attemptSwitchUser(javax.servlet.http.HttpServletRequest request) throws AuthenticationException
別のユーザーに切り替えてみてください。ユーザーが存在しないかアクティブでない場合は、null を返します。- 戻り値:
- 別のユーザーに正常に切り替えられた場合は新しい
Authentication
リクエスト、それ以外の場合はnull
。 - 例外:
UsernameNotFoundException
- 対象ユーザーが見つからない場合。LockedException
- アカウントがロックされている場合。DisabledException
- ターゲットユーザーが無効になっている場合。AccountExpiredException
- ターゲットユーザーアカウントの有効期限が切れている場合。CredentialsExpiredException
- ターゲットユーザーの資格情報が期限切れの場合。AuthenticationException
attemptExitUser
protected Authentication attemptExitUser(javax.servlet.http.HttpServletRequest request) throws AuthenticationCredentialsNotFoundException
すでに切り替えられたユーザーを終了しようとしました。- パラメーター:
request
- HTTP サーブレットリクエスト- 戻り値:
- 元の
Authentication
オブジェクトまたはそれ以外の場合はnull
。 - 例外:
AuthenticationCredentialsNotFoundException
-Authentication
がこのリクエストに関連付けられていない場合。
requiresExitUser
protected boolean requiresExitUser(javax.servlet.http.HttpServletRequest request)
exitUserUrl の存在についてリクエスト URI をチェックします。- パラメーター:
request
- HTTP サーブレットリクエスト- 戻り値:
- リクエストに出口ユーザーが必要な場合は
true
、そうでない場合はfalse
。 - 関連事項:
setExitUserUrl(String)
requiresSwitchUser
protected boolean requiresSwitchUser(javax.servlet.http.HttpServletRequest request)
switchUserUrl の存在についてリクエスト URI を確認します。- パラメーター:
request
- HTTP サーブレットリクエスト- 戻り値:
- リクエストに切り替えが必要な場合は
true
、そうでない場合はfalse
。 - 関連事項:
setSwitchUserUrl(String)
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<javax.servlet.http.HttpServletRequest,?> authenticationDetailsSource)
setMessageSource
public void setMessageSource(org.springframework.context.MessageSource messageSource)
- 次で指定:
- インターフェース
org.springframework.context.MessageSourceAware
のsetMessageSource
setUserDetailsService
public void setUserDetailsService(UserDetailsService userDetailsService)
認証データアクセスオブジェクトを設定します。- パラメーター:
userDetailsService
- 切り替えられるユーザーの情報をロードするために使用される UserDetailsService 。
setExitUserUrl
public void setExitUserUrl(java.lang.String exitUserUrl)
終了ユーザーの処理に応答するように URL を設定します。これはsetExitUserMatcher(RequestMatcher)
のショートカットです。- パラメーター:
exitUserUrl
- 出口ユーザーの URL。
setExitUserMatcher
public void setExitUserMatcher(RequestMatcher exitUserMatcher)
終了ユーザー処理に応答するようにマッチャーを設定します。- パラメーター:
exitUserMatcher
- 使用する出口マッチャー。
setSwitchUserUrl
public void setSwitchUserUrl(java.lang.String switchUserUrl)
ユーザーの切り替え処理に応答する URL を設定します。これはsetSwitchUserMatcher(RequestMatcher)
のショートカットです- パラメーター:
switchUserUrl
- ユーザー切り替え URL。
setSwitchUserMatcher
public void setSwitchUserMatcher(RequestMatcher switchUserMatcher)
ユーザーの切り替え処理に応答するようにマッチャーを設定します。- パラメーター:
switchUserMatcher
- ユーザー切り替えマッチャー。
setTargetUrl
public void setTargetUrl(java.lang.String targetUrl)
切り替え / 終了ユーザーリクエストが成功した後に移動する URL を設定します。よりカスタマイズされた動作が必要な場合は、代わりにsetSuccessHandler
を使用してください。- パラメーター:
targetUrl
- ターゲット URL。
setSuccessHandler
public void setSuccessHandler(AuthenticationSuccessHandler successHandler)
成功した切り替えまたは終了ユーザーでのカスタム動作を定義するために使用されます。targetUrl を設定する代わりに使用できます。
setSwitchFailureUrl
public void setSwitchFailureUrl(java.lang.String switchFailureUrl)
スイッチが失敗した場合にユーザーをリダイレクトする URL を設定します。例: これは、切り替えようとしているアカウントが無効であるために発生する可能性があります(ユーザーが存在しない、アカウントがロックされているなど)。設定されていない場合、エラーメッセージがレスポンスに書き込まれます。
よりカスタマイズされた動作が必要な場合は、代わりに
failureHandler
を使用してください。- パラメーター:
switchFailureUrl
- リダイレクト先の URL。
setFailureHandler
public void setFailureHandler(AuthenticationFailureHandler failureHandler)
スイッチが失敗したときのカスタム動作を定義するために使用されます。switchFailureUrl を設定する代わりに使用できます。
setSwitchUserAuthorityChanger
public void setSwitchUserAuthorityChanger(SwitchUserAuthorityChanger switchUserAuthorityChanger)
- パラメーター:
switchUserAuthorityChanger
- サブクラスに付与された権限を微調整するために使用する (SwitchUserFilter が権限を微調整してはならない場合は null)
setUserDetailsChecker
public void setUserDetailsChecker(UserDetailsChecker userDetailsChecker)
ユーザーが切り替わるたびにターゲットユーザーに呼び出されるUserDetailsChecker
を設定します。- パラメーター:
userDetailsChecker
- 切り替えられるユーザーのステータスをチェックするUserDetailsChecker
。デフォルトはAccountStatusUserDetailsChecker
です。
setUsernameParameter
public void setUsernameParameter(java.lang.String usernameParameter)
ユーザー名を含むパラメーターをカスタマイズできます。- パラメーター:
usernameParameter
- パラメーター名。デフォルトはusername
setSwitchAuthorityRole
public void setSwitchAuthorityRole(java.lang.String switchAuthorityRole)
switchAuthority のロールをカスタマイズできます。- パラメーター:
switchAuthorityRole
- ロール名。デフォルトはROLE_PREVIOUS_ADMINISTRATOR