2013-10-06 7 views
7

Ich werde implementieren eine benutzerdefinierte Autorisierung basierend auf ([User < -> Role < -> Richtig]) -Modell und Rechte sollten mit Controller und Methodenname verglichen werden (zB "Controller | Methode").Spring Security, Customizing-Autorisierung, AccessDecisionManager vs Sicherheitsfilter

verwenden ich Userdetails und AuthenticationProvider einzustellen gewährt Behörde (here), aber als aufgegebenes Quellcodes und Dokumentationen über das Anpassen, wie die Autoritäts vergleichen Customizing Ich fand es ist ein Filter SecurityContextHolderAwareRequestWrapper), die isGranted und isUserInRole implementiert Autorität zu vergleichen, während Die Dokumente sagen mit AccessDecisionManager Wähler zu passen (wie ich verstanden habe). Welcher sollte benutzt werden? Wo habe ich Controller und Methode (Aktion) Name, um Autorität mit ihnen zu vergleichen?

Ich war etwas verwirrt über die Sicherheit im Frühling. Gibt es eine andere Quelle als offizielle Dokumente, die veranschaulichen, wie es funktioniert? Ich meine die Reihenfolge der Aktionen und Methoden und wie diese angepasst werden.

Antwort

9

Es gibt mehrere Ansätze:

  1. Rolle basiert, in dem Sie jeden Benutzer eine Rolle zuweisen und die Rolle überprüfen, bevor
  2. mit Spring Sicherheits Ausdrücke fortfahren
  3. Es gibt auch eine neue Feder acl Komponenten, die Ermöglicht die Durchführung einer Acl-Kontrolle auf Klassenebene und wird in einer Datenbank gespeichert. Meine persönliche Nutzung war bisher 1 und 2, wo Sie nur Benutzern Rollen zuweisen. Aber Option 3 ermöglicht es Ihnen, feinkörniges Sicherheitsmodell zu erstellen, ohne Ihre Webapp neu zu erstellen sind, wenn das Sicherheitsmodell
  4. chaning

Role Based

Ein rollenbasierte Sicherheitsmechanismus realisiert werden kann, die UserDetailsService Schnittstelle implementieren und Konfigurieren der Federsicherheit, um diese Klasse zu verwenden.

auf lernen, wie man ein solches Projekt kann, werfen Sie einen Blick auf die folgenden Übungen realisiert werden:

  • Formular basierte Anmeldung mit im Speicher Benutzerdatenbank Link
  • Formular basierte Anmeldung mit benutzerdefinierten Userdetails Service Link

kurz Frühling Sicherheit führt die folgende hinter den Kulissen:

  1. Nach Authentifizierung (z.B. Ein Login-Formular senden) wird ein Authentifizierungsobjekt erstellt, das die Anmeldedaten enthält. Zum Beispiel erzeugt die UsernamePasswordAuthenticationFilter eine UsernamePasswordAuthenticationToken
  2. Das Authentifizierungsobjekt wird an eine AuthenticationManager übergeben, die als der Controller im Authentifizierungsprozess gedacht werden kann. Die Standardimplementierung ist ProviderManager
  3. Der AuthenticationManager führt die Authentifizierung über AuthenticationProvider durch. Die verwendete Standardimplementierung ist DaoAuthenticationProvider.
  4. Der DaoAuthenticationProvider führt eine Authentifizierung aus, indem er die UserDetails von einer UserDetailsService abruft.Die UserDetails können als ein Datenobjekt betrachtet werden, das die Benutzeranmeldeinformationen, aber auch die Autoritäten/Rollen des Benutzers enthält! Die DaoAuthenticationProvider ruft die Berechtigungsnachweise über seine loadUserByUsername Methode und vergleicht sie dann auf die zugeführte UsernamePasswordAuthenticationToken.
  5. UserDetailsService sammelt die Anmeldeinformationen des Benutzers, die Behörden und baut ein Userdetails aus ihm widersprechen. Zum Beispiel können Sie einen Passwort-Hash und Berechtigungen aus einer Datenbank abrufen. Bei der Konfiguration der Website-URL-Muster können Sie sich an die Behörden im Zugang attribute wenden. Darüber hinaus können Sie das Authentication-Objekt in Ihren Controller-Klassen über die SecurityContextHolder.getContext(). GetAuthentication() abrufen.

Furthemore ein besseres Verständnis für das Innenleben dieser Klassen erhalten Sie die javadocs lesen:

Spel

Statt Kontrolle Behörden, SPEL können Sie auch andere Eigenschaften eines Benutzers überprüfen. Sie können diese in den URL-Mustern verwenden, aber auch Methoden mit @Preauthorize annotieren. Auf diese Weise ist das Sichern der Business-Schicht weniger aufdringlich.

ACL Basierend

Die ACL basiertes Modell wurde im Frühjahr Sicherheit 3.0 eingeführt, aber nicht gut documented gewesen. Ihr Vorschlag ist, die Contacts XML example zu betrachten, da diese ihre neue acl-Komponente verwendet.

Last this book enthält große Beispiele, wie Sie Ihre Sicherheit Wünschen weiter anpassen.