2

我正在开发一个使用 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 中的create、remove 或其他服务时,用户是否具有指定的角色并不重要。它就像那里没有映射一样。

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

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

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

4

2 回答 2

2

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

于 2012-12-19T01:12:47.410 回答
0

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

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']
]
于 2013-04-03T16:48:20.830 回答