クラス SwitchUserFilter

java.lang.ObjectSE
org.springframework.web.filter.GenericFilterBean
org.springframework.security.web.authentication.switchuser.SwitchUserFilter
実装されたすべてのインターフェース:
jakarta.servlet.Filterorg.springframework.beans.factory.Awareorg.springframework.beans.factory.BeanNameAwareorg.springframework.beans.factory.DisposableBeanorg.springframework.beans.factory.InitializingBeanorg.springframework.context.ApplicationEventPublisherAwareorg.springframework.context.EnvironmentAwareorg.springframework.context.MessageSourceAwareorg.springframework.core.env.EnvironmentCapableorg.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>
 
関連事項:
  • フィールドの詳細

    • SPRING_SECURITY_SWITCH_USERNAME_KEY

      public static final StringSE SPRING_SECURITY_SWITCH_USERNAME_KEY
      関連事項:
    • ROLE_PREVIOUS_ADMINISTRATOR

      public static final StringSE ROLE_PREVIOUS_ADMINISTRATOR
      関連事項:
    • messages

      protected org.springframework.context.support.MessageSourceAccessor messages
  • コンストラクターの詳細

    • SwitchUserFilter

      public SwitchUserFilter()
  • メソッドの詳細

    • afterPropertiesSet

      public void afterPropertiesSet()
      次で指定:
      インターフェース org.springframework.beans.factory.InitializingBeanafterPropertiesSet 
      オーバーライド:
      クラス org.springframework.web.filter.GenericFilterBeanafterPropertiesSet 
    • doFilter

      public void doFilter(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response, jakarta.servlet.FilterChain chain) throws IOExceptionSE, jakarta.servlet.ServletException
      次で指定:
      インターフェース jakarta.servlet.FilterdoFilter 
      例外:
      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)
      exitUserUrl の存在についてリクエスト URI をチェックします。
      パラメーター:
      request - HTTP サーブレットリクエスト
      戻り値:
      リクエストに出口ユーザーが必要な場合は true、そうでない場合は false
      関連事項:
    • requiresSwitchUser

      protected boolean requiresSwitchUser(jakarta.servlet.http.HttpServletRequest request)
      switchUserUrl の存在についてリクエスト URI を確認します。
      パラメーター:
      request - HTTP サーブレットリクエスト
      戻り値:
      リクエストに切り替えが必要な場合は true、そうでない場合は false
      関連事項:
    • setApplicationEventPublisher

      public void setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher eventPublisher) throws org.springframework.beans.BeansException
      次で指定:
      インターフェース org.springframework.context.ApplicationEventPublisherAwaresetApplicationEventPublisher 
      例外:
      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.MessageSourceAwaresetMessageSource 
    • setUserDetailsService

      public void setUserDetailsService(UserDetailsService userDetailsService)
      認証データアクセスオブジェクトを設定します。
      パラメーター:
      userDetailsService - 切り替えられるユーザーの情報をロードするために使用される UserDetailsService
    • setExitUserUrl

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

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

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

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

      public void setTargetUrl(StringSE targetUrl)
      切り替え / 終了ユーザーリクエストが成功した後に移動する URL を設定します。よりカスタマイズされた動作が必要な場合は、代わりに setSuccessHandler を使用してください。
      パラメーター:
      targetUrl - ターゲット URL。
    • setSuccessHandler

      public void setSuccessHandler(AuthenticationSuccessHandler successHandler)
      成功した切り替えまたは終了ユーザーでのカスタム動作を定義するために使用されます。

      targetUrl を設定する代わりに使用できます。

    • setSwitchFailureUrl

      public void setSwitchFailureUrl(StringSE 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(StringSE usernameParameter)
      ユーザー名を含むパラメーターをカスタマイズできます。
      パラメーター:
      usernameParameter - パラメーター名。デフォルトは username
    • setSwitchAuthorityRole

      public void setSwitchAuthorityRole(StringSE switchAuthorityRole)
      switchAuthority のロールをカスタマイズできます。
      パラメーター:
      switchAuthorityRole - ロール名。デフォルトは ROLE_PREVIOUS_ADMINISTRATOR
    • setSecurityContextHolderStrategy

      public void setSecurityContextHolderStrategy(SecurityContextHolderStrategy securityContextHolderStrategy)
      使用する SecurityContextHolderStrategy を設定します。デフォルトのアクションは、SecurityContextHolder に格納されている SecurityContextHolderStrategy を使用することです。
      導入:
      5.8
    • setSecurityContextRepository

      public void setSecurityContextRepository(SecurityContextRepository securityContextRepository)
      ユーザーの切り替えが成功したときに SecurityContext を保存するように SecurityContextRepository を設定します。デフォルトは RequestAttributeSecurityContextRepository です。
      パラメーター:
      securityContextRepository - 使用する SecurityContextRepository。null にはできません。
      導入:
      5.7.7