2012-07-18 13 views
9

In unserer Anwendung planten wir den RoleVoter Mechanismus zu verwenden, aber wir möchten, dass der ROLE_ Präfix entfernen, da die Sicherheit, die wir implementieren, werden mehr Aufgabe als Rolle Basis beruht.Warum benötigt der RoleVoter von Spring Security ein Präfix?

Technisch gibt es kein Problem für die Implementierung, aber ich fand in der Dokumentation, dass using the RoleVoter with an empty prefix should be discouraged.

Ich frage mich warum?

AFAICS, das einzige Problem ist, dass, ohne das Präfix, das RoleVoter in Entscheidungen teilnehmen werden, dass es nicht zu gemeint ist (wie die IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED, ...) und könnte einen Zugang gibt statt einer Enthaltung verweigert .

Könnten Sie bitte bestätigen, dass dies das einzige Problem mit einem leeren Präfix ist?

Vielen Dank im Voraus M.

Antwort

13

Ja. Wenn Sie mehrere Wähler oder einen benutzerdefinierten Wähler verwenden, müssen sie wissen, welche Attribute sie verwenden sollen. Wenn Sie beispielsweise eine DayOfTheWeekVoter haben und eine Ressource mit den Attributen ROLE_USER,DAY_MONDAY definiert ist, kann die RoleVoter möglicherweise den Zugriff gewähren, da der Benutzer die Rolle "Benutzer" hat, aber die DayOfTheWeekVoter den Zugriff möglicherweise verweigert, weil es kein Montag ist.

Wenn Sie RoleVoter nicht mit einem Präfix konfigurieren, wird überprüft, ob dem Benutzer die Berechtigung "DAY_MONDAY" zugewiesen wurde, und dieses Szenario funktioniert nicht. Wenn Sie nur an Rollen interessiert sind, können Sie auf ein Präfix verzichten oder Ausdrücke (wie hasRole('user')) verwenden, die keine RoleVoter verwenden.

+1

Hallo Luke, Ich verbessere gerade Spring Boot von 1.2.2 auf 1.3.2 und dies begann für mich zu bremsen. Meine Controller haben @PreAuthorize ("hasRole ('Edit')") und jetzt wird nach dem Präfix ROLE_ gesucht. Es scheint so, als ob sich deine Erklärung von hasRole() geändert hat, seit du diese Antwort gepostet hast, weil sie den RoleVoter durchläuft. Ich habe versucht, Wege zu finden, das Präfix leer zu setzen "", aber keiner von ihnen funktioniert ... Können Sie eine andere Möglichkeit empfehlen, dies in Spring Boot 1.3.2 zu tun? – szxnyc

+2

Ich habe es in haaAuthority geändert und es hat funktioniert. – szxnyc

Verwandte Themen