【问题标题】:interceptUrlMap being overridden?interceptUrlMap 被覆盖?
【发布时间】:2012-12-18 20:56:17
【问题描述】:

我正在开发一个使用 Grails 的大型 Web 应用程序,我们正在尝试实现角色安全性的使用。系统设置时,grails 基本上是授予 CAS 身份验证用户完全的角色访问权限,但是当我为每个控制器方法创建特定角色时,它完全忽略了角色并继续允许经过身份验证的用户完全访问。

这是我在 Config.groovy 中所做的:

grails.plugins.springsecurity.securityConfigType = SecurityConfigType.InterceptUrlMap
grails.plugins.springsecurity.interceptUrlMap = [
    "/controllerName/create":                       [ "hasRole( 'ROLE_CREATE' )" ],
    "/controllerName/remove":                       [ "hasRole( 'ROLE_DELETE' )" ],
    "/controllerName/listEntries":                  [ "hasRole( 'ROLE_VIEW' )" ],
    "/controllerName/listAllEntries":               [ "hasRole( 'ROLE_VIEW' )" ],
    "/controllerName/getDefaultCategories":         [ "hasRole( 'ROLE_VIEW' )" ]
]

UrlConfig.goovy 没有 controllerName 条目。

当应用程序调用controllerName 中的create、remove 或其他服务时,用户是否具有指定角色并不重要。它就像那里没有映射一样。

是否有可能其他一些设置覆盖了interceptUrlMap?如果是这样,我应该从哪里开始?

我应该提到我们必须使用 Grails 1.3.8

更新:我尝试了下面提到的小写字母,但仍然失败。但是,如果我只是做了一个顶级(“/controllername/**”)控制器条目(与在控制器中指定一个操作相反,它会限制访问。不幸的是,我们想做“/controllername/create”类型的安全性。有什么想法吗?

【问题讨论】:

  • “用户是否具有指定的角色并不重要。它就像那里没有映射一样” - 对不起,但究竟发生了什么?您收到 404 或您无法通过 403 错误访问页面?
  • 该方法正常运行。没有错误。

标签: grails spring-security


【解决方案1】:

URL 必须小写,在启动时应该有一个警告。将“controllerName”更改为“controllername”,将“listAllEntries”更改为“listallentries”等。

【讨论】:

  • Burt,在带有 Spring Security Core 1.2.7.3 的 Grails 2.0 中是这样吗?我的 interceptUrlMap 中有骆驼案,我似乎没有任何问题..
  • 根据这个页面http://grails-plugins.github.com/grails-spring-security-core/docs/manual/guide/single.html,它仍然是 Config.groovy 的有效要求。我现在就试试...
  • 更新:我尝试了小写的东西,它仍然失败。但是,如果我只是做了一个顶级(“/controllername/**”)控制器条目(与在控制器中指定操作相反,它会限制访问。不幸的是,我们想做“/controllername/create”类型的安全性。有什么想法吗?
  • Burt,我们可以允许通配符到 interceptUrlMap 吗?这是我的问题:stackoverflow.com/questions/21792043/…
【解决方案2】:

必须是这样,这是我的例子:
请注意,* 表示该控制器内的所有操作

grails.plugins.springsecurity.interceptUrlMap = [
   '/secure/create':    ['ROLE_ADMIN'],
   '/finance/***':   ['ROLE_FINANCE', 'IS_AUTHENTICATED_FULLY'],
   '/js/**':        ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/css/**':       ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/images/**':    ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/*':            ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/login/**':     ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/logout/**':    ['IS_AUTHENTICATED_ANONYMOUSLY']
]

【讨论】:

  • 当您说“请注意 [asterisk] 表示 [s] 所有操作”时,您的意思是键入三 (3) 个星号吗? (就像您在 /finance/*** 示例中展示的那样)?
猜你喜欢
  • 2019-11-22
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 2016-06-11
  • 2016-12-27
  • 2013-09-02
  • 2017-08-31
相关资源
最近更新 更多