クラス AbstractUserDetailsAuthenticationProvider

  • 実装済みのインターフェース一覧:
    org.springframework.beans.factory.Awareorg.springframework.beans.factory.InitializingBeanorg.springframework.context.MessageSourceAwareAuthenticationProvider
    既知の直属サブクラス
    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 です。

    • フィールドの詳細

      • 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 java.lang.Exception
        次で指定:
        インターフェース org.springframework.beans.factory.InitializingBean 内の afterPropertiesSet 
        例外:
        java.lang.Exception
      • authenticate

        public Authentication authenticate​(Authentication authentication)
                                    throws AuthenticationException
        インターフェースからコピーされた説明: AuthenticationProvider
        AuthenticationManager.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 - 資格情報を検証できなかった場合 (通常、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.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 
      • setPreAuthenticationChecks

        public void setPreAuthenticationChecks​(UserDetailsChecker preAuthenticationChecks)
        資格情報の検証が行われる前に、ロードされた UserDetails のステータスを確認するために使用されるポリシーを設定します。
        パラメーター:
        preAuthenticationChecks - 認証の前に呼び出される戦略。
      • setPostAuthenticationChecks

        public void setPostAuthenticationChecks​(UserDetailsChecker postAuthenticationChecks)