クラス 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 boolean
protected final org.apache.commons.logging.Log
protected org.springframework.context.support.MessageSourceAccessor
コンストラクターの概要
コンストラクターメソッドのサマリー
修飾子と型メソッド説明protected abstract void
additionalAuthenticationChecks
(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) サブクラスが、特定の認証リクエストに対して返された(またはキャッシュされた)UserDetails
の追加チェックを実行できるようにします。final void
authenticate
(Authentication authentication) AuthenticationManager.authenticate(Authentication)
と同じ契約で認証を実行します。protected Authentication
createSuccessAuthentication
(ObjectSE principal, Authentication authentication, UserDetails user) 成功したAuthentication
オブジェクトを作成します。protected void
protected UserDetailsChecker
protected UserDetailsChecker
boolean
boolean
protected abstract UserDetails
retrieveUser
(StringSE 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
この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
インターフェースからコピーされた説明:AuthenticationProvider
AuthenticationManager.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