web-dev-qa-db-ja.com

Spring Security AuthenticationManager対AuthenticationProvider?

Spring SecurityのAuthenticationManagerAuthenticationProviderの違いを誰かに教えてもらえますか?

それらはどのように使用され、どのように呼び出されますか。 SecurityFilterAuthenticationManagerを呼び出してAuthenticationオブジェクトを認証するというのは私の理解です。しかし、AuthenticationProviderはどこで機能するのでしょうか。

ありがとう!

58
jr.

AuthenticationManagerは、永続的なユーザー情報のフェッチを1つ以上のAuthenticationProvidersに委任すると思います。認証プロバイダー(DaoAuthenticationProvider, JaasAuthenticationProvider, LdapAuthenticationProvider, OpenIDAuthenticationProvider例)特定のユーザー情報リポジトリへのアクセスを専門としています。それ以外は、リファレンスマニュアルの この部分 で言及されています。それは言う:

ProviderManagerで追加のAuthenticationProvider Beanを登録することができ、ref属性を持つ要素を使用してこれを行うことができます。属性の値は、追加するプロバイダーBeanの名前です。 。

つまり、LDAPデータベースでユーザーを探すものや、SQLデータベースで探すものなど、複数のAuthenticationProvidersを指定できます。

34
Hans Westerbeek

春から 参考

AuthenticationManagerは単なるインターフェースであるため、実装は任意に選択できます

Spring Securityのデフォルトの実装はProviderManagerと呼ばれ、認証リクエスト自体を処理するのではなく、構成済みのAuthenticationProviderのリストに委任します。それぞれのリストは、認証を実行できるかどうかを確認するために順にクエリされます。各プロバイダーは、例外をスローするか、完全に入力された認証オブジェクトを返します。

また、AuthenticationManager、ProviderManager、AuthenticationProviderのソースコードを確認すると、これがはっきりとわかります。

ProviderManagerはAuthenticationManagerインターフェースを実装し、AuthenticationProvidersのリストを持っています。したがって、カスタム認証メカニズムが必要な場合は、新しいAuthenticationProviderを実装する必要があります。

10
uiroshan