クラス AbstractUserDetailsAuthenticationProvider
- java.lang.Object
-
- org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider
- 実装済みのインターフェース一覧:
org.springframework.beans.factory.Aware、org.springframework.beans.factory.InitializingBean、org.springframework.context.MessageSourceAware、AuthenticationProvider
- 既知の直属サブクラス
DaoAuthenticationProvider
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 booleanhideUserNotFoundExceptionsprotected org.apache.commons.logging.Logloggerprotected org.springframework.context.support.MessageSourceAccessormessages
コンストラクター概要
コンストラクター コンストラクター 説明 AbstractUserDetailsAuthenticationProvider()
方法の概要
すべてのメソッド インスタンスメソッド 抽象メソッド 具象メソッド 修飾子と型 メソッド 説明 protected abstract voidadditionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication)サブクラスが、特定の認証リクエストに対して返された(またはキャッシュされた)UserDetailsの追加チェックを実行できるようにします。voidafterPropertiesSet()Authenticationauthenticate(Authentication authentication)AuthenticationManager.authenticate(Authentication)と同じ契約で認証を実行します。protected AuthenticationcreateSuccessAuthentication(java.lang.Object principal, Authentication authentication, UserDetails user)成功したAuthenticationオブジェクトを作成します。protected voiddoAfterPropertiesSet()protected UserDetailsCheckergetPostAuthenticationChecks()protected UserDetailsCheckergetPreAuthenticationChecks()UserCachegetUserCache()booleanisForcePrincipalAsString()booleanisHideUserNotFoundExceptions()protected abstract UserDetailsretrieveUser(java.lang.String 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)booleansupports(java.lang.Class<?> authentication)このAuthenticationProviderが指定されたAuthenticationオブジェクトをサポートする場合、trueを返します。
メソッドの詳細
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
public final void afterPropertiesSet() throws java.lang.Exception- 次で指定:
- インターフェース
org.springframework.beans.factory.InitializingBean内のafterPropertiesSet - 例外:
java.lang.Exception
authenticate
public Authentication authenticate(Authentication authentication) throws AuthenticationException
インターフェースからコピーされた説明:AuthenticationProviderAuthenticationManager.authenticate(Authentication)と同じ契約で認証を実行します。- 次で指定:
- インターフェース
AuthenticationProvider内のauthenticate - パラメーター:
authentication- 認証リクエストオブジェクト。- 戻り値:
- 資格情報を含む完全に認証されたオブジェクト。
AuthenticationProviderが、渡されたAuthenticationオブジェクトの認証をサポートできない場合、nullを返すことがあります。そのような場合、提示されたAuthenticationクラスをサポートする次のAuthenticationProviderが試行されます。 - 例外:
AuthenticationException- 認証が失敗した場合。
createSuccessAuthentication
protected Authentication createSuccessAuthentication(java.lang.Object principal, Authentication authentication, UserDetails user)
成功したAuthenticationオブジェクトを作成します。サブクラスがオーバーライドできるように保護されています。
サブクラスは通常、返された
Authenticationオブジェクトにユーザーが提供した元の資格情報(ソルトまたはエンコードされたパスワードではない)を格納します。- パラメーター:
principal- それは返されたオブジェクトのプリンシパルでなければなりません (isForcePrincipalAsString()メソッドによって定義されます)authentication- 検証のためにプロバイダーに提示されたuser- 実装によってロードされた- 戻り値:
- 成功した認証トークン
doAfterPropertiesSet
protected void doAfterPropertiesSet() throws java.lang.Exception- 例外:
java.lang.Exception
getUserCache
public UserCache getUserCache()
isForcePrincipalAsString
public boolean isForcePrincipalAsString()
isHideUserNotFoundExceptions
public boolean isHideUserNotFoundExceptions()
retrieveUser
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)
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
public void setUserCache(UserCache userCache)
supports
public boolean supports(java.lang.Class<?> authentication)
インターフェースからコピーされた説明:AuthenticationProviderこのAuthenticationProviderが指定されたAuthenticationオブジェクトをサポートする場合、trueを返します。trueを返すことは、AuthenticationProviderがAuthenticationクラスの提示されたインスタンスを認証できることを保証しません。それは、それがより詳細な評価をサポートできることを示しています。AuthenticationProviderは、AuthenticationProvider.authenticate(Authentication)メソッドからnullを返して、別のAuthenticationProviderを試す必要があることを示すことができます。認証を実行できる
AuthenticationProviderの選択は、実行時にProviderManagerで行われます。- 次で指定:
- インターフェース
AuthenticationProvider内のsupports - 戻り値:
- 実装が提示された
Authenticationクラスをより厳密に評価できる場合はtrue
getPreAuthenticationChecks
protected UserDetailsChecker getPreAuthenticationChecks()
setPreAuthenticationChecks
public void setPreAuthenticationChecks(UserDetailsChecker preAuthenticationChecks)
資格情報の検証が行われる前に、ロードされた UserDetails のステータスを確認するために使用されるポリシーを設定します。- パラメーター:
preAuthenticationChecks- 認証の前に呼び出される戦略。
getPostAuthenticationChecks
protected UserDetailsChecker getPostAuthenticationChecks()
setPostAuthenticationChecks
public void setPostAuthenticationChecks(UserDetailsChecker postAuthenticationChecks)
setAuthoritiesMapper
public void setAuthoritiesMapper(GrantedAuthoritiesMapper authoritiesMapper)