Grails Spring 安全核心 3.2.0.M1 - 安全注释不起作用

Grails Spring Security Core 3.2.0.M1 - secure annotations not working

我已按照所有迁移路径将 Grails 和 Spring 安全性升级到最新版本(分别为 3.3.0.RC1 和 3.2.0.M1),但现在我的注释不再有效。控制一直到我未授权的回调 (grails.plugin.springsecurity.adh.errorPage)。 我有自己的枚举支持权限列表,我用它来填充我的权限列表,这些权限正在为我的用户对象正确加载,但它们不再使用 hasRole 表达式在我的注释中工作,如下所示;

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

其他表达式工作正常,例如以下

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

我想没有人对 Grails 的最新 Spring 安全版本有任何类似的体验。请记住,在我升级之前,以上内容一直运行良好,但我在迁移路径中没有看到任何表明该系统可能存在问题的信息。 感谢提前提出任何建议。

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

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

编辑:

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

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

请尝试

@Secured ('ROLE_USER')

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

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