Ich versuche, eine Methoden-Sicherheitsannotation mit @Secured ("ADMIN") einzurichten (ohne XML, nur Java-Konfiguration, Spring-Boot). Der Zugriff über Rollen funktioniert jedoch nicht.
Sicherheitskonfiguration:
%Vor%Ich möchte den Zugriff auf die Methode des Controllers beschränken:
%Vor%Beschränken Sie den Zugriff durch die URL funktioniert mit:
%Vor%Vielleicht habe ich vergessen, anzugeben, dass ich nach Rollen einschränken möchte?
UPD:
Nach den Regeln, auf welcher Ebene muss @PreAuthorize("hasRole('ADMIN')")
in der Controller-Ebene oder in der Service-Ebene sein?
Dieses Problem wurde behoben.
Ich füge @EnableGlobalMethodSecurity(prePostEnabled = true)
Und im Controller habe ich @Secured("ADMIN")
in @PreAuthorize("hasRole('ADMIN')")
Bitte fügen Sie dies
hinzu %Vor% Dieses Element wird verwendet, um die auf Annotation basierende Sicherheit in Ihrer Anwendung zu aktivieren (indem Sie die entsprechenden Attribute für das Element festlegen) und auch Sicherheitspunktcut-Deklarationen zusammenfasst, die speziell für @Secured
im gesamten Anwendungskontext angewendet werden.
Daher sollte Ihr Code wie folgt aussehen
Es kann viele Gründe geben, warum die Methoden-Sicherheit auf einem Controller nicht funktioniert.
Erstens, weil es nie als Beispiel in Spring Security Handbuch zitiert wird ... Witze machen, aber es kann schwierig sein, Spring Tools zu nehmen, wo sie nicht gehen wollen.
Im Ernst: Sie sollten die Methodensicherheit wie bereits von @Mudassar beschrieben aktivieren. Das Handbuch sagt:
Annotationsbasierte Sicherheit können wir mithilfe der Annotation @EnableGlobalMethodSecurity
für jede @Configuration
-Instanz aktivieren. Im folgenden Beispiel wird die @Secured
-Anmerkung von Spring Security aktiviert.
Beachten Sie, dass Mudassars Antwort bis hier richtig ist.
Die Methodensicherheit basiert jedoch auf AOP, das standardmäßig JDK-Proxying auf Schnittstellen verwendet. Aus diesem Grund wenden alle Beispiele Methodensicherheit auf der Serviceebene an, da die Serviceklassen normalerweise in Controller als Schnittstellen eingefügt werden.
Sie können es natürlich auf der Controller-Ebene verwenden, aber:
@Secured
annotierte Methoden Die Regel, der ich zu folgen versuche, ist:
Ich weiß, dass dieser Thread ziemlich alt ist und meine Antwort spielt auf Teile der Antworten von verschiedenen Leuten in diesem Thread an; Aber hier ist eine Liste von Fallen und Antworten:
Hier ist ein Teil eines funktionierenden Kotlin-Beispiels:
%Vor%und
%Vor%Grüße
Sie müssen @secured (ROLE_ADMIN) anstelle von @secured (ADMIN) verwenden. Sie müssen "ROLE _" vor Ihrem Rollennamen schreiben. Bitte beachten Sie das unten genannte Beispiel, das sicherstellt, dass nur ein Benutzer mit Admin-Rolle auf die list () -Methode zugreifen kann.
%Vor%Tags und Links java security spring spring-security spring-boot