2016-12-14 1 views
1

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.

+0

Nicht sicher, ob ich Sie richtig verstanden habe, suchen Sie nicht nach 'SecurityContextHolder.getContext(). GetAuthentication()'? – Artegon

+0

@ 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. –

Antwort

1

Interessante Frage, Blick auf WebInvocationPrivilegeEvaluator es könnte Ihren Bedürfnissen entsprechen.

isAllowed(String contextPath, String uri, String method, Authentication authentication) 

Sie können es in Aktion zum Beispiel here sehen.

+0

Aus irgendeinem Grund verwendet WebInvocationPrivilegeEvaluator nicht die mit @PreAuthorize deklarierten Regeln. Vielleicht ist ein Fehler, ich bin mir nicht sicher. Ich werde ein Beispielprojekt erstellen, um das Problem neu zu erstellen, und wenn ich denke, dass es sich um einen Fehler handelt, werde ich es auf GitHub veröffentlichen. –

+0

Teilen Sie bitte Ihren Prototyp. – Artegon

+1

Ich habe ein Problem in GitHub geöffnet: [link] (https://github.com/spring-projects/spring-security/issues/4159). In der Beschreibung des Problems finden Sie den Link zu einem Beispielprojekt, das das Problem veranschaulicht. –

Verwandte Themen