クラス AbstractUserDetailsAuthenticationProvider

java.lang.ObjectSE
org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider
実装されたすべてのインターフェース:
org.springframework.beans.factory.Awareorg.springframework.beans.factory.InitializingBeanorg.springframework.context.MessageSourceAwareAuthenticationProvider
既知の直属サブクラス
DaoAuthenticationProvider

public abstract class AbstractUserDetailsAuthenticationProvider extends ObjectSE 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 です。

  • フィールドの詳細

    • logger

      protected final org.apache.commons.logging.Log logger
    • messages

      protected org.springframework.context.support.MessageSourceAccessor messages
    • hideUserNotFoundExceptions

      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 (一般的に BadCredentialsExceptionAuthenticationServiceException)
    • afterPropertiesSet

      public final void afterPropertiesSet() throws ExceptionSE
      次で指定:
      インターフェース org.springframework.beans.factory.InitializingBeanafterPropertiesSet 
      例外:
      ExceptionSE
    • authenticate

      public Authentication authenticate(Authentication authentication) throws AuthenticationException
      インターフェースからコピーされた説明: AuthenticationProvider
      AuthenticationManager.authenticate(Authentication) と同じ契約で認証を実行します。
      次で指定:
      インターフェース AuthenticationProviderauthenticate 
      パラメーター:
      authentication - 認証リクエストオブジェクト。
      戻り値:
      資格情報を含む完全に認証されたオブジェクト。AuthenticationProvider が、渡された Authentication オブジェクトの認証をサポートできない場合、null を返すことがあります。そのような場合、提示された Authentication クラスをサポートする次の AuthenticationProvider が試行されます。
      例外:
      AuthenticationException - 認証が失敗した場合。
    • createSuccessAuthentication

      protected Authentication createSuccessAuthentication(ObjectSE principal, Authentication authentication, UserDetails user)
      成功した Authentication オブジェクトを作成します。

      サブクラスがオーバーライドできるように保護されています。

      サブクラスは通常、返された Authentication オブジェクトにユーザーが提供した元の資格情報(ソルトまたはエンコードされたパスワードではない)を格納します。

      パラメーター:
      principal - それは返されたオブジェクトのプリンシパルでなければなりません (isForcePrincipalAsString() メソッドによって定義されます)
      authentication - 検証のためにプロバイダーに提示された
      user - 実装によってロードされた
      戻り値:
      成功した認証トークン
    • doAfterPropertiesSet

      protected void doAfterPropertiesSet() throws ExceptionSE
      例外:
      ExceptionSE
    • getUserCache

      public UserCache 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 - 資格情報を検証できなかった場合 (通常、BadCredentialsExceptionAuthenticationServiceException または 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.MessageSourceAwaresetMessageSource 
    • setUserCache

      public void setUserCache(UserCache userCache)
    • supports

      public boolean supports(ClassSE<?> authentication)
      インターフェースからコピーされた説明: AuthenticationProvider
      この AuthenticationProvider が指定された Authentication オブジェクトをサポートする場合、true を返します。

      true を返しても、AuthenticationProvider が提示された Authentication オブジェクトを認証できることは保証されません。これは単に、より詳細な評価をサポートできることを示しているだけです。AuthenticationProvider は、AuthenticationProvider.authenticate(Authentication) メソッドから null を返して、別の AuthenticationProvider を試す必要があることを示すことができます。

      認証を実行できる AuthenticationProvider の選択は、実行時に ProviderManager で行われます。

      次で指定:
      インターフェース AuthenticationProvidersupports 
      戻り値:
      実装が提示された 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)