【问题标题】:Grails Spring Security Core 3.2.0.M1 - secure annotations not workingGrails Spring Security Core 3.2.0.M1 - 安全注释不起作用
【发布时间】:2018-02-22 17:12:47
【问题描述】:

我已按照所有迁移路径将 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 版本有过类似的体验。请记住,在我升级之前,上述内容一直运行良好,但我在迁移路径中看不到任何表明该系统可能存在问题的内容。 提前感谢您的任何建议。

【问题讨论】:

    标签: spring-security grails-3.3


    【解决方案1】:

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

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

    编辑:

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

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

    【讨论】:

      【解决方案2】:

      请尝试

      @Secured ('ROLE_USER')
      

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

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

      【讨论】:

        猜你喜欢
        • 2012-01-01
        • 2015-09-20
        • 2016-02-23
        • 2021-09-27
        • 2011-08-20
        • 2015-12-19
        • 2013-02-15
        • 2014-02-05
        • 1970-01-01
        相关资源
        最近更新 更多