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.
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? –
Dieses Problem wird ebenfalls gelöst, indem @EnableGlobalMethodSecurity (prePostEnabled = true) in der Sicherheitskonfiguration verwendet wird. –