2015-08-13 11 views
10

Moja aplikacja Spring Boot działa na Spring Security 3.2.7.RELEASE. Teraz chciałbym zaktualizować go do 4.0.2.RELEASE.Jak radzić sobie z defaultRolePrefix = "ROLE_" w aktualizacji Spring Security od wersji 3.2.7 do 4.0.2.RELEASE

Po godzinach debugowania I odkryli, że wiosna Bezpieczeństwo 4.0.2.RELEASE wykorzystuje defaultRolePrefix="ROLE_"

w

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

W mojej aplikacji używam role bez tego prefiksu i odpowiednio uzyskać AccessDeniedException .

Jak skonfigurować Spring Boot, aby użyć SecurityExpressionRoot.defaultRolePrefix=""?

+1

Przykro mi, że miałeś trudności z migracją. Czy widzisz, że jest to uwzględnione w przewodniku migracji? http://docs.spring.io/spring-security/site/docs/4.0.x/reference/htmlsingle/#m3to4 W szczególności, jeśli podasz link, który wysłałem, powinieneś dostać się na http://docs.spring.io/ spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-jc.html # m3to4-role-prefixing –

+1

Dzięki Rob, znalazłem przyczynę tego po 2 godzinach debugowanie projektu bezpieczeństwa wiosennego. Zmieniłem hasRole na hasAuthority i teraz wszystko działa jak czar. – alexanoid

+1

Cieszę się, że znalazłeś problem. Miałem nadzieję, że jeśli ty (lub inni) napotkasz więcej problemów związanych z migracją, to pomoc udzielona przez dostarczony przeze mnie przewodnik. –

Odpowiedz

9

Znalazłem rozwiązanie, jak to naprawić. Muszę zmienić hasRole do hasAuthority, na przykład:

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

W drugiej strony można usunąć rola prefiks ass opisane here. W tym cas możesz swobodnie korzystać z innych adnotacji.

Powiązane problemy