2015-12-31 29 views
5

Sono solo un principiante in Spring Security, ma mi piacerebbe sapere che è possibile configurare il keycloak in modo da poter utilizzare , @PostAuthorize, @Secured e altre annotazioni. Per esempio, ho configurato la Primavera di sicurezza keycloak-spring-security-adapter e nel mio semplice webapp primavera Resto in modo da avere accesso a scopo principale nel mio controller, in questo modo:Utilizzo di annotazioni di sicurezza a molla con il tasto chiave

@RestController 
public class TMSRestController { 

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

Ma quando provo questo (solo un esempio , in realtà io voglio eseguire un'espressione EL personalizzato prima autorizzazione):

@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)); 
    } 
... 
} 

ottengo un'eccezione:

org.springframework.security.authentication. AuthenticationCredentialsNotFoundException: Un oggetto di autenticazione non è stato trovato nel SecurityContext

Nel mio config sicurezza primavera ho attivato la sicurezza metodo globale:

cosa ho bisogno di fare questo le annotazioni di sicurezza a molla funzionano? È possibile utilizzare questa annotazione in questo contesto?

risposta

3

È ancora necessario configurare Spring Security utilizzando Keycloak. Dai uno sguardo allo adapter documentation per una configurazione basata su annotazioni. Una volta impostato, le annotazioni di Spring Security funzioneranno con le chiamate autorizzate.

+0

La risposta era un po 'di tempo fa, ma ho avuto qualche problema simile con Spring Security e Keycloak. Nella mia applicazione Spring Boot ho configurato l'adattatore ma non ho potuto usare '@PreAuthorize (" hasAuthority ('user') ")'. Se è stata inviata una richiesta, l'annotazione non ha avuto alcun effetto. L'ho risolto ora aggiungendo '@EnableGlobalMethodSecurity (prePostEnabled = true)' alla mia configurazione di sicurezza. – hesch