我正在使用Grails 2.3.3
和spring-security-core:2.0-RC4
插件。
我试图通过保护控制器操作来保护控制器操作,具体取决于来自带参数的服务的方法调用的结果。此参数应该是请求参数内的内容。
我希望能够做到以下几点:
@Secured("@mySecurityService.myCustomCheck(params.id)")
def myAction(){
//do some things
}
我设法能够做到以下几点:
@Secured("@mySecurityService.myCustomCheck()")
但现在我不知道如何访问发送到控制器的请求参数。
在架构上是否可以在params
表示法中引用@Secured
变量?
PS:我知道你会让我使用spring-security-acl
插件。我的问题是,它还增加了一些我认为不需要的其他东西。
答案 0 :(得分:4)
在2.0中,您可以使用闭包作为注释的检查;在文档中有一个简短的文章和示例:https://grails-plugins.github.io/grails-spring-security-core/v2/guide/newInV2.html
你这样表达你的榜样:
@Secured(closure={
ctx.mySecurityService.myCustomCheck(
request.getParameter('id'))
})
返回true
以允许访问。
请注意,ApplicationContext
可用作ctx
变量,请求可用作request
;这是使用SpEL时可用的其他变量和方法的补充(有关详细信息,请参阅Spring Security文档)。 params
不可用,但您可以使用request.getParameter