我有一个使用Spring Security插件(版本1.2.7.3)的Grails(2.0.4)应用程序和安全的注释方法(默认方法,更多here)。
现在,我在UrlMapping.groovy中使用资源键或控制器/操作对来拥有这些URL,如下所示:
"/$controller/$action?/$id?" {
constraints {
// apply constraints here
}
}
// other rules, all working properly
"/api/item/$id?"(resource: 'itemRest')
'/api/item/batch-delete'(controller: 'itemRest', action: 'batchDelete')
RESTful映射与ItemRestController完美配合:使用正确的HTTP方法正确映射每个方法(显示,更新,保存,删除)。额外的方法(batchDelete)也可以。
我保护了API网址,执行此操作:
grails.plugins.springsecurity.controllerAnnotations.staticRules = [
// ...
'/something/**': ['IS_AUTHENTICATED_FULLY']
'/api/**': ['IS_AUTHENTICATED_FULLY']
]
现在,如果我打电话,我会被重定向到登录页面:
http://host/context/something/bla_bla
但是,如果我打电话(在需要时使用适当的有效载荷),那就不行了:
http://host/context/api/item/batchDelete
http://host/context/api/item/1
http://host/context/api/item
我怀疑使用资源键映射其余控制器时静态规则无法正常工作。
另请注意,UrlMapping.groovy文件中不存在“内容”网址。
有什么想法吗?
答案 0 :(得分:7)
我认为你必须使用
grails.plugins.springsecurity.controllerAnnotations.staticRules = [
'/itemrest/**': ['IS_AUTHENTICATED_FULLY'],
//this will be redundant after the above rule I guess
'/api/**': ['IS_AUTHENTICATED_FULLY']
]
未在urlMapping中映射的网址必须直接在规则中引用controller
。请查看文档中controllerAnnotations.staticRules
下的warning。
映射映射到的控制器的URL时 UrlMappings.groovy,您需要保护未记录URL的URL。对于 例如,如果您有一个映射到的FooBarController / foo / bar / $ action,你必须注册 controllerAnnotations.staticRules为/ foobar / **。这是不同的 而不是你将用于其他两种方法的映射 必需的因为controllerAnnotations.staticRules条目是 对待它们就好像它们是相应控制器上的注释一样。