我正在使用Grails 2.3.3
和spring-security-core:2.0-RC4
插件。
我正在尝试通过根据采用参数的服务的方法调用的结果来保护控制器操作来保护它。此参数应该是请求参数中的内容。
我希望能够执行以下操作:
@Secured("@mySecurityService.myCustomCheck(params.id)")
def myAction(){
//do some things
}
我设法做到了以下几点:
@Secured("@mySecurityService.myCustomCheck()")
但现在我不知道如何访问发送到控制器的请求参数。
在架构上是否可以在@Secured
表示法中引用params
变量?
PS:我知道你会要求我使用spring-security-acl
插件。我的问题是它还增加了一堆我认为我不需要的其他东西。
在 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
访问值