2010-02-24 5 views
38

Kann mir jemand den Unterschied zwischen einer und einer AuthenticationProvider in Spring Security sagen?Federsicherheit AuthenticationManager vs AuthenticationProvider?

Wie werden sie verwendet und wie heißen sie? Es ist mein Verständnis, dass ein SecurityFilter den AuthenticationManager aufrufen wird, um ein Authentication Objekt zu authentifizieren? Aber wo kommt dann die AuthenticationProvider ins Spiel?

Danke!

Antwort

25

Ich denke, die AuthenticationManager delegiert das Abrufen von persistenten Benutzerinformationen zu einem oder mehreren AuthenticationProvider s. Die Authentifizierungsanbieter (z. B. DaoAuthenticationProvider, JaasAuthenticationProvider, LdapAuthenticationProvider, OpenIDAuthenticationProvider) sind auf den Zugriff auf bestimmte Benutzer-Informations-Repositories spezialisiert. Etwas anderes ist in this part des Referenzhandbuchs erwähnt. Es heißt:

Sie möchten möglicherweise zusätzliche AuthenticationProvider-Beans mit dem ProviderManager registrieren, und Sie können dies mithilfe des Elements mit dem ref-Attribut tun, wobei der Wert des Attributs der Name der Provider-Bean ist, die Sie hinzufügen möchten.

Mit anderen Worten, Sie können mehrere AuthenticationProvider angeben, zum Beispiel einen, der nach Benutzern in einer LDAP-Datenbank sucht, und einen anderen, der in einer SQL-Datenbank sucht.

+0

Sie müssten also sehr selten einen AuthenticationManager implementieren, sondern Sie würden einfach AuthenticationProvider implementieren, um die Benutzerdetails von überall her zu holen, von denen Sie sie erhalten möchten? –

+0

Die meisten Authentifizierungsprovider, die Sie benötigen könnten, wurden bereits von den Typen geschrieben, die Spring Security schreiben, und sind in der API-Dokumentation enthalten, damit Sie sie konfigurieren können. Wenn das, was Sie benötigen, noch nicht im Framework ist, ist es wahrscheinlich trivial, die AuthenticationProvider-Schnittstelle für Ihre Zwecke zu implementieren. –

+0

Wie Hans sagte, In Sprint Security, Die Klasse ProviderManager ist eine Implementierung von AuthenticationManager, die Authentifizierungsmethode AuthenticationProvider aufruft. Die Methodensignatur dieses Provider-Managers lautet org.springframework.security.providers.ProviderManager.doAuthentication (Authentifizierung) – Rajesh

3

Von Frühling reference

Die AuthenticationManager nur eine Schnittstelle ist, so kann die Umsetzung alles, was wir

Die Standardimplementierung in Spring Security heißt Provider und anstatt Umgang mit der Authentifizierungs-Anfrage selbst wählen sein, Es delegiert an eine Liste von konfigurierten AuthenticationProvider s, von denen jeder der Reihe nach abgefragt wird, um zu sehen, ob es die Authentifizierung durchführen kann. Jeder Anbieter wird entweder eine Ausnahme auslösen oder ein vollständig ausgefülltes Authentifizierungsobjekt zurückgeben.

Auch wenn Sie den Quellcode für AuthenticationManager, ProviderManager und AuthenticationProvider überprüfen, können Sie dies deutlich sehen.

ProviderManager implementiert die AuthenticationManager-Schnittstelle und eine Liste von AuthenticationProviders. Wenn Sie einen benutzerdefinierten Authentifizierungsmechanismus verwenden möchten, müssen Sie einen neuen AuthenticationProvider implementieren.