public class ProviderManager extends java.lang.Object 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 から取得するときに、認証失敗イベントも発行することに注意してください。この状況では、通常、親はイベントを公開するように構成しないでください。そうしないと、重複が発生します。
| 修飾子と型 | フィールドと説明 |
|---|---|
protected org.springframework.context.support.MessageSourceAccessor | messages |
| コンストラクターと説明 |
|---|
ProviderManager(AuthenticationProvider... providers) 指定された AuthenticationProvider を使用して ProviderManager を構築します |
ProviderManager(java.util.List<AuthenticationProvider> providers) 指定された AuthenticationProvider を使用して ProviderManager を構築します |
ProviderManager(java.util.List<AuthenticationProvider> providers, AuthenticationManager parent) 提供されたパラメーターを使用して ProviderManager を作成します |
| 修飾子と型 | メソッドと説明 |
|---|---|
void | afterPropertiesSet() |
Authentication | authenticate(Authentication authentication) 渡された Authentication オブジェクトの認証を試みます。 |
java.util.List<AuthenticationProvider> | getProviders() |
boolean | isEraseCredentialsAfterAuthentication() |
void | setAuthenticationEventPublisher(AuthenticationEventPublisher eventPublisher) |
void | setEraseCredentialsAfterAuthentication(boolean eraseSecretData) 設定されている場合、 CredentialsContainer インターフェースを実装する結果の Authentication は、authenticate() メソッドから返される前に eraseCredentials メソッドが呼び出されます。 |
void | setMessageSource(org.springframework.context.MessageSource messageSource) |
public ProviderManager(AuthenticationProvider... providers)
AuthenticationProvider を使用して ProviderManager を構築します providers - 使用する AuthenticationProviderpublic ProviderManager(java.util.List<AuthenticationProvider> providers)
AuthenticationProvider を使用して ProviderManager を構築します providers - 使用する AuthenticationProviderpublic ProviderManager(java.util.List<AuthenticationProvider> providers, AuthenticationManager parent)
ProviderManager を作成します providers - 使用する AuthenticationProviderparent - フォールバックする親 AuthenticationManagerpublic void afterPropertiesSet()
org.springframework.beans.factory.InitializingBean 内の afterPropertiesSet public Authentication authenticate(Authentication authentication) throws AuthenticationException
Authentication オブジェクトの認証を試みます。AuthenticationProvider のリストは、AuthenticationProvider が、渡された Authentication オブジェクトの型を認証できることを示すまで、連続して試行されます。次に、その AuthenticationProvider で認証が試行されます。
渡された Authentication オブジェクトを複数の AuthenticationProvider がサポートする場合、Authentication オブジェクトを正常に認証できる最初のオブジェクトが result を決定し、以前のサポート AuthenticationProvider によってスローされた可能性のある AuthenticationException をオーバーライドします。認証に成功すると、後続の AuthenticationProvider は試行されません。サポートする AuthenticationProvider によって認証が成功しなかった場合、最後にスローされた AuthenticationException が再スローされます。
AuthenticationManager 内の authenticate authentication - 認証リクエストオブジェクト。AuthenticationException - 認証が失敗した場合。public java.util.List<AuthenticationProvider> getProviders()
public void setMessageSource(org.springframework.context.MessageSource messageSource)
org.springframework.context.MessageSourceAware 内の setMessageSource public void setAuthenticationEventPublisher(AuthenticationEventPublisher eventPublisher)
public void setEraseCredentialsAfterAuthentication(boolean eraseSecretData)
CredentialsContainer インターフェースを実装する結果の Authentication は、authenticate() メソッドから返される前に eraseCredentials メソッドが呼び出されます。eraseSecretData - 資格情報データをメモリに保持するには、false に設定します。デフォルトは true です。public boolean isEraseCredentialsAfterAuthentication()