【问题标题】:secure grails spring security controllers安全 grails spring 安全控制器
【发布时间】:2014-12-09 14:13:59
【问题描述】:

我在我的 Grails 项目中使用 spring 安全插件。为了保护 URL,我使用interceptUrlMap

我的用户和角色类分别是 User.groovyRole.groovy。基于这些类,s2-quickstart 脚本生成了UserController.groovyRoleController.groovy

当我想保护UserController.groovy 时,问题就出现了。我的要求是我不能允许所有用户创建一个新用户。因此,对于具有适当角色权限的用户,需要阻止 UserController 的某些操作。

但是无论我如何尝试限制访问,我看到UserController 的所有操作总是可以访问的。

谁能解释我哪里出错了。非常感谢任何帮助。

【问题讨论】:

  • 请分享一些代码。至少UserController.groovyConfig.groovy
  • grails.plugin.springsecurity.interceptUrlMap = [ '/':['permitAll'], '/**/js/**':['permitAll'], '/**/css /**':['permitAll'], '/**/images/**':['permitAll'], '/**/data/**':['permitAll'], '/**/ favicon.ico':['permitAll'], '/login/**':['permitAll'], '/logout/**':['permitAll'], '/user/edit/**':[ 'ROLE_ADMIN', 'ROLE_MRU', 'ROLE_FINANCE', 'ROLE_PROCUREMENT', 'ROLE_DATABASE_ADMIN'], '/user/**':['ROLE_ADMIN'], ]
  • 对不起,我发布代码的方式。我没有足够的字符来发布条目代码
  • 问题在于编辑操作。如您所见,我已授予 ROLE_MRU 编辑用户的权限。但是当我尝试访问 url /user/edit/1 时,访问被阻止。我确实有一个 id 为 1 的用户,所以该网址完全有效。
  • 至于UserController.groovy,控件甚至没有到达action。我已经通过在编辑操作的最开始添加一些打印语句来确认这一点。什么都没有打印出来。所以问题一定是 Config.groovy。

标签: grails spring-security grails-plugin grails-controller grails-2.3


【解决方案1】:

最好使用注解而不是在 Config.groovy 中定义规则。这有两个方面的帮助,即首先,热重载将始终有效,其次您可以在 Config.groovy 中轻松覆盖任何规则。这意味着您可以在 Config.groovy 中使用注释和普通规则。

所以在 Config.groovy 中改变这个

grails.plugin.springsecurity.securityConfigType = "Annotation"

并开始保护您的控制器或操作,例如:

import grails.plugin.springsecurity.annotation.Secured

@Secured(["ROLE_MRU"])
class UserController {

    def edit() {
        // action code
    }

    @Secured(["ROLE_ADMIN"])
    def show() {
        // action code
    }
}

【讨论】:

    【解决方案2】:

    我已经设法解决了这个问题。问题是我在应用程序仍在运行时正在编辑 Config.groovy。没有进行热部署。

    一旦我重新启动应用程序,该功能就开始工作了。

    感谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 2020-07-01
      • 2014-02-15
      • 2015-10-01
      • 1970-01-01
      • 2016-09-18
      • 2015-07-02
      • 2012-09-30
      • 2014-02-05
      • 2012-09-09
      相关资源
      最近更新 更多