クラス ProviderManager

java.lang.ObjectSE
org.springframework.security.authentication.ProviderManager
実装されたすべてのインターフェース:
org.springframework.beans.factory.Awareorg.springframework.beans.factory.InitializingBeanorg.springframework.context.MessageSourceAwareAuthenticationManager

public class ProviderManager extends ObjectSE implements AuthenticationManager, org.springframework.context.MessageSourceAware, org.springframework.beans.factory.InitializingBean
AuthenticationProvider のリストを介して Authentication リクエストを繰り返します。

通常、 AuthenticationProvider は、null 以外のレスポンスが返されるまで順番に試行されます。NULL 以外のレスポンスは、プロバイダーに認証リクエストを決定する権限があり、それ以上プロバイダーが試行されないことを示します。後続のプロバイダーがリクエストを正常に認証すると、以前の認証例外は無視され、成功した認証が使用されます。後続のプロバイダーが null 以外のレスポンスまたは新しい AuthenticationException を提供しない場合、最後に受信した AuthenticationException が使用されます。プロバイダが null 以外のレスポンスを返さない場合、または Authentication を処理できることを示す場合、ProviderManager は ProviderNotFoundException をスローします。親 AuthenticationManager も設定できます。これは、構成されたプロバイダーのいずれも認証を実行できない場合にも試行されます。ただし、これは名前空間の構成オプションをサポートするためのものであり、通常は必要な機能ではありません。

このプロセスの例外は、プロバイダーが AccountStatusException をスローする場合です。この場合、リスト内のそれ以上のプロバイダーは照会されません。認証後、CredentialsContainer インターフェースを実装している場合、返された Authentication オブジェクトから資格情報がクリアされます。この動作は、eraseCredentialsAfterAuthentication プロパティを変更することで制御できます。

イベント発行

認証イベントの発行は、デフォルトではイベントを発行しない null 実装に設定された AuthenticationEventPublisher に委譲されます。そのため、Bean を自分で設定している場合、イベントを受信するにはパブリッシャー Bean を注入する必要があります。標準実装は DefaultAuthenticationEventPublisher で、一般的な例外をイベントにマップし(認証が失敗した場合)、認証が成功した場合に AuthenticationSuccessEvent を公開します。名前空間を使用している場合、この Bean のインスタンスは <http> 構成によって自動的に使用されるため、アプリケーションの Web パーツからイベントを自動的に受け取ります。

実装は、認証結果(または例外)が設定されている場合、その認証結果を「親」 AuthenticationManager から取得するときに、認証失敗イベントも発行することに注意してください。この状況では、通常、親はイベントを公開するように構成しないでください。そうしないと、重複が発生します。

関連事項:
  • フィールドの詳細

    • messages

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

  • メソッドの詳細

    • afterPropertiesSet

      public void afterPropertiesSet()
      次で指定:
      インターフェース org.springframework.beans.factory.InitializingBeanafterPropertiesSet 
    • authenticate

      public Authentication authenticate(Authentication authentication) throws AuthenticationException
      渡された Authentication オブジェクトの認証を試みます。

      AuthenticationProvider のリストは、AuthenticationProvider が、渡された Authentication オブジェクトの型を認証できることを示すまで、連続して試行されます。次に、その AuthenticationProvider で認証が試行されます。

      渡された Authentication オブジェクトを複数の AuthenticationProvider がサポートする場合、Authentication オブジェクトを正常に認証できる最初のオブジェクトが result を決定し、以前のサポート AuthenticationProvider によってスローされた可能性のある AuthenticationException をオーバーライドします。認証に成功すると、後続の AuthenticationProvider は試行されません。サポートする AuthenticationProvider によって認証が成功しなかった場合、最後にスローされた AuthenticationException が再スローされます。

      次で指定:
      インターフェース AuthenticationManagerauthenticate 
      パラメーター:
      authentication - 認証リクエストオブジェクト。
      戻り値:
      資格情報を含む完全に認証されたオブジェクト。
      例外:
      AuthenticationException - 認証が失敗した場合。
    • getProviders

      public ListSE<AuthenticationProvider> getProviders()
    • setMessageSource

      public void setMessageSource(org.springframework.context.MessageSource messageSource)
      次で指定:
      インターフェース org.springframework.context.MessageSourceAwaresetMessageSource 
    • setAuthenticationEventPublisher

      public void setAuthenticationEventPublisher(AuthenticationEventPublisher eventPublisher)
    • setEraseCredentialsAfterAuthentication

      public void setEraseCredentialsAfterAuthentication(boolean eraseSecretData)
      設定されている場合、CredentialsContainer インターフェースを実装する結果の Authentication は、authenticate() メソッドから返される前に eraseCredentials メソッドが呼び出されます。
      パラメーター:
      eraseSecretData - 資格情報データをメモリに保持するには、false に設定します。デフォルトは true です。
    • isEraseCredentialsAfterAuthentication

      public boolean isEraseCredentialsAfterAuthentication()