我的Spring Boot应用程序适用于Spring Security 3.2.7.RELEASE。现在,我想将其更新为4.0.2.RELEASE。
Spring Security 3.2.7.RELEASE
4.0.2.RELEASE
经过数小时的调试,我发现Spring Security 4.0.2.RELEASE使用 defaultRolePrefix="ROLE_"
defaultRolePrefix="ROLE_"
在
org.springframework.security.access.expression.SecurityExpressionRoot.hasAnyAuthorityName(String prefix, String... roles) 方法
org.springframework.security.access.expression.SecurityExpressionRoot.hasAnyAuthorityName(String prefix, String... roles)
在我的应用程序中,我使用没有此前缀的角色,因此得到AccessDeniedException。
AccessDeniedException
如何配置Spring Boot以便使用SecurityExpressionRoot.defaultRolePrefix=""?
SecurityExpressionRoot.defaultRolePrefix=""
我找到了解决方案。我需要将hasRole更改为hasAuthority,例如:
@PreAuthorize("hasAuthority('PERMISSION_CREATE_NODE')")