2012-03-28 3 views
4

Während der Implementierung einiger Sicherheitsaspekte mit Spring Security, habe ich festgestellt, dass sowohl als auch UserDetails doppelte Methoden wie getAuthorities, getCredentials und so weiter haben.Warum hat Spring doppelte Felder in Authentication und UserDetails?

Was ist das Ziel dahinter? Es scheint mir eine nutzlose Redundanz zu sein.

Edit: Da sind die Leute zu faul, um die Signaturen zu überprüfen. Beide Schnittstellen haben dieselben Methoden. Ich beziehe mich nicht darauf getCredentials und getAuthorities sind die gleichen. Warum zum Teufel machen Menschen diese Annahme?

+0

Ich bin auch davon überrascht, und ich sehe keine gute Erklärung. Ich habe einen benutzerdefinierten AuthenticationProvider implementiert und in der 'authenticate()' Methode muss ich folgendes zurückgeben: 'return new BenutzernamePasswordAuthenticationToken (neuer Benutzer (Benutzername, Passwort, BEHÖRDEN), Passwort, BEHÖRDEN);' – MarcFasel

+0

Nach ein paar Untersuchungen der Spring Sicherheit, Ich betrachte es so: 'Authentication' wird ausschließlich von Spring Security verwendet. 'UserDetails' ist nur für den Client-Code vorgesehen. Aufgrund unterschiedlicher Kodierungstermine schneiden sie sich irgendwann. Denken Sie also daran, dass "Authentifizierung" nichts für Sie ist. Hoffentlich werden sie es in Spring Security 3.0 aufräumen. –

Antwort

4

UserDetails ist nicht aus Sicherheitsgründen verwendet, es ist nur eine "Benutzerinfo" Bean. Spring Security verwendet Authentication Instanzen. So hat Authentication Instanz in der Regel nur die Informationen benötigt, um Benutzer anmelden (Benutzernamen, Anmeldeinformationen und Rollen, im Grunde). ist generischer und kann alles enthalten, was mit der Benutzerverwaltung zu tun hat (z. B. Kontaktinformationen, Kontoinformationen, Fotos, was auch immer).

Normalerweise haben Sie eine Authentication Instanz, die von einer Instanz unterstützt wird.

+0

Scheint so zu sein, aber ich konnte immer noch einige Aufrufe von 'UserDetails # getPassword' in einigen Spring-Klassen finden. Ich denke, das ist Erbe. Die Klasse "UserDetails" ist nicht so allgemein wie die Klasse "Authentication". –

-1
getAuthorities 

Wird für rollenbasierte Sicherheit verwendet. Es ist oft ein nützliches Feature in SpringSecurity.

Wird verwendet, um ein Passwort oder Hash-Passwort zu erhalten, wenn der Prinzipal korrekt ist. Auch notwendige Methode in der Sicherheit.

Wenn Sie sicher sind, brauchen Sie diese Funktionen nicht, Sie können diese Methoden mit leeren überschreiben.

+0

Siehe meine Bearbeitung. Du hast die Frage nicht verstanden. –

Verwandte Themen