1

通过遵循所有迁移路径,我已将 Grails 和 Spring Security 升级到最新版本(分别为 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 Security 版本有任何类似的经验。请记住,在我升级之前,上述内容一直运行良好,但我在迁移路径中看不到任何表明该系统可能存在问题的内容。提前感谢您的任何建议。

4

2 回答 2

2

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

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

编辑:

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

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

于 2017-09-14T13:01:43.147 回答
1

请尝试

@Secured ('ROLE_USER')

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

@Secured(['ROLE_USER','ROLE_ADMIN'])
于 2017-09-17T14:32:55.433 回答