Ich entwickle gerade eine Anwendung mit Spring Boot 1.4.2.RELEASE und Spring Security 4.1.3.RELEASE. Die Anwendung verfügt über Ruhe-Controller und empfängt JSON-Nachrichten und antwortet darauf. Diese Anwendung kommuniziert mit einer Angular-Anwendung. Ich habe bereits die Authentifizierung und Autorisierung der Arbeit mit Konfigurationen wie:Benutzerautorisierung innerhalb der Anwendung mit Spring Security Filter Chain programmgesteuert verifizieren
http.authorizeRequests()
.antMatchers(HttpMethod.POST, "/foo/bar/**")
.access("(hasRole('OPERATOR') && hasRole('MAKER')) || hasRole('ADMIN')")
.anyRequest().authenticated()
.and()
.httpBasic();
Und Regeln in den RestControllers Methoden wie:
@PreAuthorize("hasRole(#id) || hasRole('ADMIN')")
Alles ohne Probleme arbeiten, jetzt bin ich das Hinzufügen Frühling Hateoas. Ich weiß, dass Hateoas nicht mit Benutzerberechtigung für Ressourcen verbunden ist, aber ich möchte in der Lage sein, an die eckige App zusätzliche Informationen zu senden. Nicht nur die Verknüpfung der Ressource, sondern auch welche Aktionen (http Verben) der Benutzer hat.
Ich möchte dies nicht tun, um die Sicherheit der Anwendung zu verbessern, es ist nur um die Benutzerfreundlichkeit zu verbessern. In der Angular App möchte ich eine Funktion aktivieren oder deaktivieren können, abhängig davon, was der Server sendet.
Also hier kommt meine Frage, gibt es eine verfügbare Klasse in Spring Security, die ich Autowire kann, um eine URL zu testen und zu sehen, ob der Benutzer berechtigt ist, eine bestimmte Aktion für diese bestimmte URL auszuführen?
Alle in der Spring Security-Dokumentation erwähnten Klassen, die ich bisher getestet habe, werden von der @Autowire-Annotation nicht erkannt.
Nicht sicher, ob ich Sie richtig verstanden habe, suchen Sie nicht nach 'SecurityContextHolder.getContext(). GetAuthentication()'? – Artegon
@ user1315357 Ich kenne diese Methode, mit der ich das Benutzerprofil bekomme. Aber um zu wissen, ob der Benutzer zum Beispiel POST http://example.com/foo/bar ausführen kann, muss ich eine Logik kodifizieren, die nicht die Regeln verwendet, die ich im antMatcher wie in der Frage beschrieben erklärt habe. –