クラス SwitchUserFilter

  • 実装されたすべてのインターフェース:
    javax.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>
     
    関連事項:
    SwitchUserGrantedAuthority
    • フィールドサマリー

      フィールド  
      修飾子と型 フィールド 説明
      protected org.springframework.context.support.MessageSourceAccessormessages
      static java.lang.StringROLE_PREVIOUS_ADMINISTRATOR
      static java.lang.StringSPRING_SECURITY_SWITCH_USERNAME_KEY
      • クラス org.springframework.web.filter.GenericFilterBean から継承されたフィールド

        logger
    • コンストラクターのサマリー

      コンストラクター  
      コンストラクター 説明
      SwitchUserFilter()
    • メソッドのサマリー

      すべてのメソッド   インスタンスメソッド   具象メソッド  
      修飾子と型 メソッド 説明
      voidafterPropertiesSet()
      protected AuthenticationattemptExitUser​(javax.servlet.http.HttpServletRequest request)
      すでに切り替えられたユーザーを終了しようとしました。
      protected AuthenticationattemptSwitchUser​(javax.servlet.http.HttpServletRequest request)
      別のユーザーに切り替えてみてください。
      voiddoFilter​(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response, javax.servlet.FilterChain chain)
      protected booleanrequiresExitUser​(javax.servlet.http.HttpServletRequest request)
      exitUserUrl の存在についてリクエスト URI をチェックします。
      protected booleanrequiresSwitchUser​(javax.servlet.http.HttpServletRequest request)
      switchUserUrl の存在についてリクエスト URI を確認します。
      voidsetApplicationEventPublisher​(org.springframework.context.ApplicationEventPublisher eventPublisher)
      voidsetAuthenticationDetailsSource​(AuthenticationDetailsSource<javax.servlet.http.HttpServletRequest,​?> authenticationDetailsSource)
      voidsetExitUserMatcher​(RequestMatcher exitUserMatcher)
      終了ユーザー処理に応答するようにマッチャーを設定します。
      voidsetExitUserUrl​(java.lang.String exitUserUrl)
      出口ユーザー処理に応答する URL を設定します。
      voidsetFailureHandler​(AuthenticationFailureHandler failureHandler)
      スイッチが失敗したときのカスタム動作を定義するために使用されます。
      voidsetMessageSource​(org.springframework.context.MessageSource messageSource)
      voidsetSuccessHandler​(AuthenticationSuccessHandler successHandler)
      成功した切り替えまたは終了ユーザーでのカスタム動作を定義するために使用されます。
      voidsetSwitchAuthorityRole​(java.lang.String switchAuthorityRole)
      switchAuthority のロールをカスタマイズできます。
      voidsetSwitchFailureUrl​(java.lang.String switchFailureUrl)
      スイッチが失敗した場合にユーザーをリダイレクトする URL を設定します。
      voidsetSwitchUserAuthorityChanger​(SwitchUserAuthorityChanger switchUserAuthorityChanger)
      voidsetSwitchUserMatcher​(RequestMatcher switchUserMatcher)
      ユーザーの切り替え処理に応答するようにマッチャーを設定します。
      voidsetSwitchUserUrl​(java.lang.String switchUserUrl)
      ユーザーの切り替え処理に応答する URL を設定します。
      voidsetTargetUrl​(java.lang.String targetUrl)
      切り替え / 終了ユーザーリクエストが成功した後に移動する URL を設定します。
      voidsetUserDetailsChecker​(UserDetailsChecker userDetailsChecker)
      ユーザーが切り替わるたびにターゲットユーザーに呼び出される UserDetailsChecker を設定します。
      voidsetUserDetailsService​(UserDetailsService userDetailsService)
      認証データアクセスオブジェクトを設定します。
      voidsetUsernameParameter​(java.lang.String usernameParameter)
      ユーザー名を含むパラメーターをカスタマイズできます。
      • クラス org.springframework.web.filter.GenericFilterBean から継承されたメソッド

        addRequiredProperty, createEnvironment, destroy, getEnvironment, getFilterConfig, getFilterName, getServletContext, init, initBeanWrapper, initFilterBean, setBeanName, setEnvironment, setServletContext
      • クラス java.lang.Object から継承されたメソッド

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • フィールドの詳細

      • 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
    • コンストラクターの詳細

      • SwitchUserFilter

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

      • afterPropertiesSet

        public void afterPropertiesSet()
        次で指定:
        インターフェース org.springframework.beans.factory.InitializingBeanafterPropertiesSet 
        オーバーライド:
        クラス org.springframework.web.filter.GenericFilterBeanafterPropertiesSet 
      • 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.FilterdoFilter 
        例外:
        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.ApplicationEventPublisherAwaresetApplicationEventPublisher 
        例外:
        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.MessageSourceAwaresetMessageSource 
      • 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)
      • setUsernameParameter

        public void setUsernameParameter​(java.lang.String usernameParameter)
        ユーザー名を含むパラメーターをカスタマイズできます。
        パラメーター:
        usernameParameter - パラメーター名。デフォルトは username
      • setSwitchAuthorityRole

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