如何处理从Spring Security 3.2.7升级到4.0.2.RELEASE中的defaultRolePrefix="ROLE_"问题

14
我的Spring Boot应用程序运行在Spring Security 3.2.7.RELEASE上。现在,我想将其更新为4.0.2.RELEASE
经过几个小时的调试,我发现Spring Security 4.0.2.RELEASE使用了defaultRolePrefix="ROLE_"
这是在org.springframework.security.access.expression.SecurityExpressionRoot.hasAnyAuthorityName(String prefix, String... roles)方法中。
在我的应用程序中,我使用不带此前缀的角色,因此我会收到AccessDeniedException异常。
如何配置Spring Boot以使用SecurityExpressionRoot.defaultRolePrefix=""

2
很抱歉看到你在迁移过程中遇到了困难。你有没有看到迁移指南中有关这个问题的解决方法?http://docs.spring.io/spring-security/site/docs/4.0.x/reference/htmlsingle/#m3to4 具体来说,如果你按照我发送的链接,应该能够找到 http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-jc.html#m3to4-role-prefixing - Rob Winch
1
谢谢Rob,经过2个小时的调试Spring安全项目,我已经找到了原因。我将hasRole更改为hasAuthority,现在一切都像魔法般地运行。 - alexanoid
1
很高兴看到你找到了问题所在。我希望如果你(或其他人)在迁移过程中遇到更多问题,我提供的指南可以帮助到你们。 - Rob Winch
2个回答

16

我找到了解决方法。 我需要将hasRole更改为hasAuthority,例如:

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

1
另一方面,您可以像这里所述那样删除角色前缀。在这种情况下,您可以自由使用其他注释。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接