2015-12-31 6 views
5

Ich bin nur ein Anfänger in Spring Security, aber ich würde gerne wissen, ist es möglich, Keycloak in einer Weise zu konfigurieren, die ich @PreAuthorize, @PostAuthorize, @Secured und andere Anmerkungen verwenden kann. Zum Beispiel habe ich die keycloak-spring-security-adapter und Spring Security in meiner einfachen Federauflage Webapp so konfiguriert, dass ich Zugriff auf Principal-Objekt in meinem Controller haben, wie folgt aus:Verwenden von Feder Sicherheitsanmerkungen mit Schlüsselhülle

@RestController 
public class TMSRestController { 

    @RequestMapping("/greeting") 
    public Greeting greeting(Principal principal, @RequestParam(value="name") String name) { 
     return new Greeting(String.format(template, name)); 
    } 
... 
} 

Aber wenn ich versuche, diese (nur ein Beispiel eigentlich mag ich benutzerdefinierten EL Ausdruck vor der Genehmigung zur Ausführung):

@RestController 
public class TMSRestController { 

    @RequestMapping("/greeting") 
    @PreAuthorize("hasRole('ADMIN')") 
    public Greeting greeting(Principal principal, @RequestParam(value="name") String name) { 
     return new Greeting(String.format(template, name)); 
    } 
... 
} 

I Ausnahme erhalten:

org.springframework.security.authentication. AuthenticationCredentialsNotFoundException: Ein Objekt-Authentifizierung wurde nicht in der Security gefunden

In meiner Feder Sicherheits Config I globale Methode Sicherheit aktiviert:

Was muss ich in diesem Frühjahr Sicherheit Anmerkungen arbeiten machen? Kann diese Annotation überhaupt in diesem Zusammenhang verwendet werden?

Antwort

3

Sie müssen Spring Security immer noch mit Keycloak konfigurieren. Werfen Sie einen Blick auf die adapter documentation für eine Annotation-basierte Konfiguration. Sobald dies eingerichtet ist, funktionieren Ihre Spring Security-Anmerkungen bei autorisierten Anrufen.

+0

Die Antwort war vor einiger Zeit, aber ich habe ein ähnliches Problem mit Spring Security und Keycloak. In meiner Spring Boot-Anwendung habe ich den Adapter konfiguriert, konnte aber '@ PreAuthorize (" hasAuthority ('user') ")' 'nicht verwenden. Wenn eine Anfrage gesendet wurde, hatte die Anmerkung keine Wirkung. Ich habe es jetzt behoben, indem ich '@EnableGlobalMethodSecurity (prePostEnabled = true)' zu meiner Sicherheitskonfiguration hinzugefügt habe. – hesch