Grails Spring Security Core 3.2.0.M1 - 安全注释无法正常工作

时间:2017-09-13 21:11:07

标签: spring-security grails-3.3

我已经通过跟踪所有迁移路径将Grails和Spring Security升级到最新版本(分别为3.3.0.RC1和3.2.0.M1)但现在我的注释不再有效了。控制贯穿到我未授权的回调(grails.plugin.springsecurity.adh.errorPage)。 我有自己的enum支持权限列表,用于填充我的用户对象正确加载的权限列表,但它们不再使用hasRole表达式在我的注释中工作,如下所示;

@Secured(["hasAnyRole('PERM_VIEW_REPORTS'"])

其他表达式正常运行,如下面的

@Secured("authentication.name == 'sys_admin'")
@Secured("hasRole('PERM_VIEW_REPORTS')")

我不认为任何人对Grails的最新Spring Security版本有任何类似的经验。请记住,上述功能完美无缺,直到我升级,但我没有在迁移路径中看到任何暗示此系统可能存在问题的内容。 提前感谢任何建议。

2 个答案:

答案 0 :(得分:1)

这归结为新的Spring Security 3.2.0.M1版本中的“ROLE_”前缀是强制性的。从上面可以看出,到目前为止我一直在使用“PERM_”前缀来表示我使用的是基于权限而不是基于角色的范例。

我希望将此添加到插件的迁移指南中,因为它是AFAIC的一个主要遗漏。我希望这将成为未来版本中插件的配置选项。

编辑:

事实证明,Spring Security引入了新方法hasAuthority()hasAnyAuthority(),它们不使用默认角色前缀,因此可以用来代替hasRole()hasAnyRole()

我已经分叉并更新了针对3.2的Spring Security文档并发送了拉取请求。

答案 1 :(得分:0)

请尝试

@Secured ('ROLE_USER')

如果您尝试使用多个角色进行保护

@Secured(['ROLE_USER','ROLE_ADMIN'])