2015-08-13 8 views
10

L'applicazione Spring Boot funziona su Spring Security 3.2.7.RELEASE. Ora, vorrei aggiornarlo a 4.0.2.RELEASE.Come gestire defaultRolePrefix = "ROLE_" nell'aggiornamento Spring Security da 3.2.7 a 4.0.2.RELEASE

Dopo ore di eseguire il debug ho trovato che Primavera di sicurezza 4.0.2.RELEASE utilizza defaultRolePrefix="ROLE_"

in

org.springframework.security.access.expression.SecurityExpressionRoot.hasAnyAuthorityName(String prefix, String... roles) metodo

Nella mia applicazione uso ruoli senza questo prefisso e di conseguenza ho AccessDeniedException .

Come configurare Spring Boot per utilizzare SecurityExpressionRoot.defaultRolePrefix=""?

+1

Mi dispiace vedere che hai difficoltà a migrare. Hai visto che questo è coperto nella guida alla migrazione? http://docs.spring.io/spring-security/site/docs/4.0.x/reference/htmlsingle/#m3to4 In particolare se segui il link che ho inviato dovresti andare a http://docs.spring.io/ spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-jc.html # m3to4-role-prefixing –

+1

Grazie Rob, ne ho trovato una ragione dopo 2 ore di debug spring security project. Ho cambiato hasRole in hasAuthority e ora tutto funziona come un incantesimo. – alexanoid

+1

Felice di vedere che hai trovato il problema. Speravo che se tu (o altri) avessi incontrato altri problemi con la migrazione, la guida che ti ho fornito sarebbe stata di aiuto. –

risposta

9

Ho trovato la soluzione su come risolverlo. Ho bisogno di cambiare hasRole a hasAuthority, ad esempio:

@PreAuthorize("hasAuthority('PERMISSION_CREATE_NODE')") 
0

In altra parte è possibile rimuovere il prefisso ruolo ass descritto here. In questo caso sei libero di usare altre annotazioni.

Problemi correlati