2017-01-30 6 views
3

Ich kann hasRole Methode in @PreAuthorize Annotation nicht verwenden. Auch request.isUserInRole(“ADMIN”) gibt false. Was vermisse ich? Obwohl .hasAuthority(“ADMIN”) funktioniert gut.Springboot Security hasRole funktioniert nicht

Ich erteile den Benutzern Berechtigungen aus einer Datenbank.

Antwort

7

Sie haben Ihre Berechtigung mit dem Präfix zu nennen ROLE_isUserInRole Verwendung finden Spring Security Reference:

Die HttpServletRequest.isUserInRole (String) wird entscheiden, ob SecurityContextHolder.getContext().getAuthentication().getAuthorities() eine GrantedAuthority mit der Rolle in isUserInRole(String) weitergegeben enthält. In der Regel sollten Benutzer das Präfix "ROLE_" nicht in diese Methode eingeben, da sie automatisch hinzugefügt wird. Zum Beispiel, wenn Sie, wenn der aktuelle Benutzer die Berechtigung "ROLE_ADMIN" bestimmen wollen hat, können Sie den folgenden verwenden:

boolean isAdmin = httpServletRequest.isUserInRole("ADMIN"); 

Das Gleiche gilt für hasRole (auch hasAnyRole), siehe Spring Security Reference:

Gibt true zurück, wenn der aktuelle Principal die angegebene Rolle hat. Wenn die angegebene Rolle nicht mit 'ROLE_' beginnt, wird sie standardmäßig hinzugefügt. Dies kann durch Ändern der defaultRolePrefix auf DefaultWebSecurityExpressionHandler angepasst werden.

+0

kann ich nicht viel danken. Ich hatte mehrere Stunden damit verschwendet. Aber PreAuthorize funktioniert immer noch nicht in meinem Controller. Soll es nicht auf Controller-Ebene arbeiten und nur auf Service-Ebene arbeiten? –

+2

Dieses Problem wird ebenfalls gelöst, indem @EnableGlobalMethodSecurity (prePostEnabled = true) in der Sicherheitskonfiguration verwendet wird. –

Verwandte Themen