クラス AbstractUserDetailsAuthenticationProvider
- 実装されているすべてのインターフェース:
org.springframework.beans.factory.Aware、org.springframework.beans.factory.InitializingBean、org.springframework.context.MessageSourceAware、AuthenticationProvider
- 既知の直属サブクラス
DaoAuthenticationProvider
UserDetails オブジェクトをオーバーライドして操作できるようにするベース AuthenticationProvider。このクラスは、UsernamePasswordAuthenticationToken 認証リクエストに応答するように設計されています。 検証に成功すると、UsernamePasswordAuthenticationToken が作成され、呼び出し元に返されます。トークンには、ユーザ名の String 表現、あるいは認証リポジトリから返された UserDetails のいずれかがプリンシパルとして含まれます。コンテナーアダプターを使用している場合は、ユーザ名の String 表現を期待して String を使用するのが適切です。UserDetails の使用は、メールアドレスや人間に分かりやすい名前など、認証されたユーザの追加のプロパティへのアクセスを必要とする場合に適しています。コンテナーアダプターの使用は推奨されておらず、UserDetails の実装はさらなる柔軟性を提供するため、デフォルトでは UserDetails が返されます。このデフォルトを上書きするには、setForcePrincipalAsString(boolean) を true に設定します。
キャッシュは、UserCache に配置される UserDetails オブジェクトを保存することで処理されます。これにより、UserDetailsService を照会する必要なく、同じユーザー名を持つ後続のリクエストを検証できます。ユーザーが誤ったパスワードを提示しているように見える場合、UserDetailsService が照会され、最新のパスワードが比較に使用されたことを確認します。キャッシングは、ステートレスアプリケーションにのみ必要になる可能性があります。たとえば、通常の Web アプリケーションでは、 SecurityContext はユーザーのセッションに保存され、ユーザーはリクエストごとに再認証されません。デフォルトのキャッシュ実装は NullUserCache です。
フィールドのサマリー
フィールド修飾子と型フィールド説明protected booleanprotected final org.apache.commons.logging.Logprotected org.springframework.context.support.MessageSourceAccessorコンストラクターの概要
コンストラクターメソッドのサマリー
修飾子と型メソッド説明protected abstract voidadditionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) サブクラスが、特定の認証リクエストに対して返された(またはキャッシュされた)UserDetailsの追加チェックを実行できるようにします。final voidauthenticate(Authentication authentication) AuthenticationManager.authenticate(Authentication)と同じ契約で認証を実行します。protected AuthenticationcreateSuccessAuthentication(ObjectSE principal, Authentication authentication, UserDetails user) 成功したAuthenticationオブジェクトを作成します。protected voidprotected UserDetailsCheckerprotected UserDetailsCheckerbooleanbooleanprotected abstract UserDetailsretrieveUser(StringSE username, UsernamePasswordAuthenticationToken authentication) サブクラスが実装固有の場所からUserDetailsを実際に取得できるようにします。提示された資格情報が正しくない場合、すぐにAuthenticationExceptionをスローするオプションがあります(これは、ユーザーとしてリソースにバインドする必要がある場合に特に役立ちます。UserDetailsを生成します)。voidsetAuthoritiesMapper(GrantedAuthoritiesMapper authoritiesMapper) voidsetForcePrincipalAsString(boolean forcePrincipalAsString) voidsetHideUserNotFoundExceptions(boolean hideUserNotFoundExceptions) デフォルトでは、ユーザー名が見つからないか、パスワードが正しくない場合、AbstractUserDetailsAuthenticationProviderはBadCredentialsExceptionをスローします。voidsetMessageSource(org.springframework.context.MessageSource messageSource) voidsetPostAuthenticationChecks(UserDetailsChecker postAuthenticationChecks) voidsetPreAuthenticationChecks(UserDetailsChecker preAuthenticationChecks) 資格情報の検証が行われる前に、ロードされた UserDetails のステータスを確認するために使用されるポリシーを設定します。voidsetUserCache(UserCache userCache) booleanこのAuthenticationProviderが指定されたAuthenticationオブジェクトをサポートする場合、trueを返します。
フィールドの詳細
logger
protected final org.apache.commons.logging.Log loggermessages
protected org.springframework.context.support.MessageSourceAccessor messageshideUserNotFoundExceptions
protected boolean hideUserNotFoundExceptions
コンストラクターの詳細
AbstractUserDetailsAuthenticationProvider
public AbstractUserDetailsAuthenticationProvider()
メソッドの詳細
additionalAuthenticationChecks
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)
afterPropertiesSet
- 次で指定:
- インターフェース
org.springframework.beans.factory.InitializingBeanのafterPropertiesSet - 例外:
ExceptionSE
authenticate
インターフェースからコピーされた説明:AuthenticationProviderAuthenticationManager.authenticate(Authentication)と同じ契約で認証を実行します。- 次で指定:
- インターフェース
AuthenticationProviderのauthenticate - パラメーター:
authentication- 認証リクエストオブジェクト。- 戻り値:
- 資格情報を含む完全に認証されたオブジェクト。
AuthenticationProviderが、渡されたAuthenticationオブジェクトの認証をサポートできない場合、nullを返すことがあります。そのような場合、提示されたAuthenticationクラスをサポートする次のAuthenticationProviderが試行されます。 - 例外:
AuthenticationException- 認証が失敗した場合。
createSuccessAuthentication
protected Authentication createSuccessAuthentication(ObjectSE principal, Authentication authentication, UserDetails user) 成功したAuthenticationオブジェクトを作成します。サブクラスがオーバーライドできるように保護されています。
サブクラスは通常、返された
Authenticationオブジェクトにユーザーが提供した元の資格情報(ソルトまたはエンコードされたパスワードではない)を格納します。- パラメーター:
principal- それは返されたオブジェクトのプリンシパルでなければなりません (isForcePrincipalAsString()メソッドによって定義されます)authentication- 検証のためにプロバイダーに提示されたuser- 実装によってロードされた- 戻り値:
- 成功した認証トークン
doAfterPropertiesSet
- 例外:
ExceptionSE
getUserCache
isForcePrincipalAsString
public boolean isForcePrincipalAsString()isHideUserNotFoundExceptions
public boolean isHideUserNotFoundExceptions()retrieveUser
protected abstract UserDetails retrieveUser(StringSE 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)
setForcePrincipalAsString
public void setForcePrincipalAsString(boolean forcePrincipalAsString) setHideUserNotFoundExceptions
public void setHideUserNotFoundExceptions(boolean hideUserNotFoundExceptions) デフォルトでは、ユーザー名が見つからないか、パスワードが正しくない場合、AbstractUserDetailsAuthenticationProviderはBadCredentialsExceptionをスローします。このプロパティをfalseに設定すると、前者の代わりにUsernameNotFoundExceptionがスローされます。これは、両方の例外に対してBadCredentialsExceptionをスローするよりも安全性が低いと見なされることに注意してください。- パラメーター:
hideUserNotFoundExceptions- 非特定のBadCredentialsExceptionの代わりにUsernameNotFoundExceptionをスローしたい場合はfalseに設定 (デフォルトはtrue)
setMessageSource
public void setMessageSource(org.springframework.context.MessageSource messageSource) - 次で指定:
- インターフェース
org.springframework.context.MessageSourceAwareのsetMessageSource
setUserCache
supports
インターフェースからコピーされた説明:AuthenticationProviderこのAuthenticationProviderが指定されたAuthenticationオブジェクトをサポートする場合、trueを返します。trueを返すことは、AuthenticationProviderがAuthenticationクラスの提示されたインスタンスを認証できることを保証しません。それは、それがより詳細な評価をサポートできることを示しています。AuthenticationProviderは、AuthenticationProvider.authenticate(Authentication)メソッドからnullを返して、別のAuthenticationProviderを試す必要があることを示すことができます。認証を実行できる
AuthenticationProviderの選択は、実行時にProviderManagerで行われます。- 次で指定:
- インターフェース
AuthenticationProviderのsupports - 戻り値:
- 実装が提示された
Authenticationクラスをより厳密に評価できる場合はtrue
getPreAuthenticationChecks
setPreAuthenticationChecks
資格情報の検証が行われる前に、ロードされた UserDetails のステータスを確認するために使用されるポリシーを設定します。- パラメーター:
preAuthenticationChecks- 認証の前に呼び出される戦略。
getPostAuthenticationChecks
setPostAuthenticationChecks
setAuthoritiesMapper