public abstract class AbstractUserDetailsAuthenticationProvider extends java.lang.Object implements AuthenticationProvider, org.springframework.beans.factory.InitializingBean, org.springframework.context.MessageSourceAware
UserDetails オブジェクトをオーバーライドして操作できるようにするベース AuthenticationProvider。このクラスは、UsernamePasswordAuthenticationToken 認証リクエストに応答するように設計されています。 検証に成功すると、UsernamePasswordAuthenticationToken が作成され、呼び出し元に返されます。トークンには、ユーザ名の String 表現、あるいは認証リポジトリから返された UserDetails のいずれかがプリンシパルとして含まれます。コンテナーアダプターを使用している場合は、ユーザ名の String 表現を期待して String を使用するのが適切です。UserDetails の使用は、メールアドレスや人間に分かりやすい名前など、認証されたユーザの追加のプロパティへのアクセスを必要とする場合に適しています。コンテナーアダプターの使用は推奨されておらず、UserDetails の実装はさらなる柔軟性を提供するため、デフォルトでは UserDetails が返されます。このデフォルトを上書きするには、setForcePrincipalAsString(boolean) を true に設定します。
キャッシュは、UserCache に配置される UserDetails オブジェクトを保存することで処理されます。これにより、UserDetailsService を照会する必要なく、同じユーザー名を持つ後続のリクエストを検証できます。ユーザーが誤ったパスワードを提示しているように見える場合、UserDetailsService が照会され、最新のパスワードが比較に使用されたことを確認します。キャッシングは、ステートレスアプリケーションにのみ必要になる可能性があります。たとえば、通常の Web アプリケーションでは、 SecurityContext はユーザーのセッションに保存され、ユーザーはリクエストごとに再認証されません。デフォルトのキャッシュ実装は NullUserCache です。
| 修飾子と型 | フィールドと説明 |
|---|---|
protected boolean | hideUserNotFoundExceptions |
protected org.apache.commons.logging.Log | logger |
protected org.springframework.context.support.MessageSourceAccessor | messages |
| コンストラクターと説明 |
|---|
AbstractUserDetailsAuthenticationProvider() |
| 修飾子と型 | メソッドと説明 |
|---|---|
protected abstract void | additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) サブクラスが、特定の認証リクエストに対して返された(またはキャッシュされた) UserDetails の追加チェックを実行できるようにします。 |
void | afterPropertiesSet() |
Authentication | authenticate(Authentication authentication)AuthenticationManager.authenticate(Authentication) と同じ契約で認証を実行します。 |
protected Authentication | createSuccessAuthentication(java.lang.Object principal, Authentication authentication, UserDetails user) 成功した Authentication オブジェクトを作成します。 |
protected void | doAfterPropertiesSet() |
protected UserDetailsChecker | getPostAuthenticationChecks() |
protected UserDetailsChecker | getPreAuthenticationChecks() |
UserCache | getUserCache() |
boolean | isForcePrincipalAsString() |
boolean | isHideUserNotFoundExceptions() |
protected abstract UserDetails | retrieveUser(java.lang.String username, UsernamePasswordAuthenticationToken authentication) サブクラスが実装固有の場所から UserDetails を実際に取得できるようにします。提示された資格情報が正しくない場合、すぐに AuthenticationException をスローするオプションがあります(これは、ユーザーとしてリソースにバインドする必要がある場合に特に役立ちます。UserDetails を生成します)。 |
void | setAuthoritiesMapper(GrantedAuthoritiesMapper authoritiesMapper) |
void | setForcePrincipalAsString(boolean forcePrincipalAsString) |
void | setHideUserNotFoundExceptions(boolean hideUserNotFoundExceptions) デフォルトでは、ユーザー名が見つからないか、パスワードが正しくない場合、 AbstractUserDetailsAuthenticationProvider は BadCredentialsException をスローします。 |
void | setMessageSource(org.springframework.context.MessageSource messageSource) |
void | setPostAuthenticationChecks(UserDetailsChecker postAuthenticationChecks) |
void | setPreAuthenticationChecks(UserDetailsChecker preAuthenticationChecks) 資格情報の検証が行われる前に、ロードされた UserDetails のステータスを確認するために使用されるポリシーを設定します。 |
void | setUserCache(UserCache userCache) |
boolean | supports(java.lang.Class<?> authentication) この AuthenticationProvider が指定された Authentication オブジェクトをサポートする場合、true を返します。 |
protected final org.apache.commons.logging.Log logger
protected org.springframework.context.support.MessageSourceAccessor messages
protected boolean hideUserNotFoundExceptions
public AbstractUserDetailsAuthenticationProvider()
protected abstract void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException
UserDetails の追加チェックを実行できるようにします。通常、サブクラスは少なくとも Authentication.getCredentials() と UserDetails.getPassword() を比較します。UserDetails および / または UsernamePasswordAuthenticationToken の追加のプロパティを比較するためにカスタムロジックが必要な場合、これらもこのメソッドに表示されます。userDetails - retrieveUser(String, UsernamePasswordAuthenticationToken) または UserCache から取得したもの authentication - 認証が必要な現在のリクエスト AuthenticationException - 資格情報を検証できなかった場合は AuthenticationException (一般的に BadCredentialsException、AuthenticationServiceException)public final void afterPropertiesSet()
throws java.lang.Exceptionorg.springframework.beans.factory.InitializingBean 内の afterPropertiesSet java.lang.Exceptionpublic Authentication authenticate(Authentication authentication) throws AuthenticationException
AuthenticationProviderAuthenticationManager.authenticate(Authentication) と同じ契約で認証を実行します。AuthenticationProvider 内の authenticate authentication - 認証リクエストオブジェクト。AuthenticationProvider が、渡された Authentication オブジェクトの認証をサポートできない場合、null を返すことがあります。そのような場合、提示された Authentication クラスをサポートする次の AuthenticationProvider が試行されます。AuthenticationException - 認証が失敗した場合。protected Authentication createSuccessAuthentication(java.lang.Object principal, Authentication authentication, UserDetails user)
Authentication オブジェクトを作成します。サブクラスがオーバーライドできるように保護されています。
サブクラスは通常、返された Authentication オブジェクトにユーザーが提供した元の資格情報(ソルトまたはエンコードされたパスワードではない)を格納します。
principal - それは返されたオブジェクトのプリンシパルでなければなりません (isForcePrincipalAsString() メソッドによって定義されます)authentication - 検証のためにプロバイダーに提示された user - 実装によってロードされた protected void doAfterPropertiesSet()
throws java.lang.Exceptionjava.lang.Exceptionpublic UserCache getUserCache()
public boolean isForcePrincipalAsString()
public boolean isHideUserNotFoundExceptions()
protected abstract UserDetails retrieveUser(java.lang.String username, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException
UserDetails を実際に取得できるようにします。提示された資格情報が正しくない場合、すぐに AuthenticationException をスローするオプションがあります(これは、ユーザーとしてリソースにバインドする必要がある場合に特に役立ちます。UserDetails を生成します)。AbstractUserDetailsAuthenticationProvider はデフォルトで UserDetails をキャッシュするため、キャッシュを実行するためにサブクラスは必要ありません。UserDetails のキャッシュは、このメソッドでバインディングベースの戦略を採用するサブクラスによって資格情報の正確性が保証されている場合でも、キャッシュに依存する後続のリクエストがまだ資格情報を検証する必要があるため、さらなる複雑さを示します。サブクラスがキャッシュを無効にすることが重要です(UserDetails がキャッシュされないため、このメソッドがリクエストを認証できる唯一のメソッドであることを確認したい場合)、またはサブクラスが additionalAuthenticationChecks(UserDetails, UsernamePasswordAuthenticationToken) を実装してキャッシュされた資格情報を比較することを確認すること UserDetails と後続の認証リクエスト。
ほとんどの場合、サブクラスはこのメソッドで資格情報インスペクションを実行せず、代わりに additionalAuthenticationChecks(UserDetails, UsernamePasswordAuthenticationToken) で実行するため、資格情報の検証に関連するコードを 2 つのメソッド間で複製する必要はありません。
username - 取得するユーザー名 authentication - サブクラスが UserDetails のバインディングベースの検索を実行する必要があるかもしれない認証リクエスト null - 代わりに例外がスローされます)AuthenticationException - 資格情報を検証できなかった場合 (通常、BadCredentialsException、AuthenticationServiceException または UsernameNotFoundException)public void setForcePrincipalAsString(boolean forcePrincipalAsString)
public void setHideUserNotFoundExceptions(boolean hideUserNotFoundExceptions)
AbstractUserDetailsAuthenticationProvider は BadCredentialsException をスローします。このプロパティを false に設定すると、前者の代わりに UsernameNotFoundException がスローされます。これは、両方の例外に対して BadCredentialsException をスローするよりも安全性が低いと見なされることに注意してください。hideUserNotFoundExceptions - 非特定の BadCredentialsException の代わりに UsernameNotFoundException をスローしたい場合は false に設定 (デフォルトは true)public void setMessageSource(org.springframework.context.MessageSource messageSource)
org.springframework.context.MessageSourceAware 内の setMessageSource public void setUserCache(UserCache userCache)
public boolean supports(java.lang.Class<?> authentication)
AuthenticationProviderAuthenticationProvider が指定された Authentication オブジェクトをサポートする場合、true を返します。true を返すことは、AuthenticationProvider が Authentication クラスの提示されたインスタンスを認証できることを保証しません。それは、それがより詳細な評価をサポートできることを示しています。AuthenticationProvider は、AuthenticationProvider.authenticate(Authentication) メソッドから null を返して、別の AuthenticationProvider を試す必要があることを示すことができます。
認証を実行できる AuthenticationProvider の選択は、実行時に ProviderManager で行われます。
AuthenticationProvider 内の supports Authentication クラスをより厳密に評価できる場合は true protected UserDetailsChecker getPreAuthenticationChecks()
public void setPreAuthenticationChecks(UserDetailsChecker preAuthenticationChecks)
preAuthenticationChecks - 認証の前に呼び出される戦略。protected UserDetailsChecker getPostAuthenticationChecks()
public void setPostAuthenticationChecks(UserDetailsChecker postAuthenticationChecks)
public void setAuthoritiesMapper(GrantedAuthoritiesMapper authoritiesMapper)