Grails 有没有可能破解spring security核心插件@Secured annotation,以便能够引用给定给控制器的请求参数?

Grails 有没有可能破解spring security核心插件@Secured annotation,以便能够引用给定给控制器的请求参数?,grails,spring-security,Grails,Spring Security,我正在使用Grails2.3.3和spring安全核心:2.0-RC4插件 我正试图通过根据从接受参数的服务进行的方法调用的结果来保护控制器操作。此参数应该在请求参数中 我希望能够做到以下几点: @Secured("@mySecurityService.myCustomCheck(params.id)") def myAction(){ //do some things } @Secured("@mySecurityService.myCustomCheck()") 我设法做到了以下

我正在使用Grails2.3.3和spring安全核心:2.0-RC4插件

我正试图通过根据从接受参数的服务进行的方法调用的结果来保护控制器操作。此参数应该在请求参数中

我希望能够做到以下几点:

@Secured("@mySecurityService.myCustomCheck(params.id)")
def myAction(){
    //do some things
}
@Secured("@mySecurityService.myCustomCheck()")
我设法做到了以下几点:

@Secured("@mySecurityService.myCustomCheck(params.id)")
def myAction(){
    //do some things
}
@Secured("@mySecurityService.myCustomCheck()")
但是现在我不知道如何访问发送到控制器的请求参数

在体系结构上是否可以在@Secured符号中引用params变量


我知道你会要求我使用SpringSecurityACL插件。我的问题是,它还添加了一些我认为不需要的其他东西。

在2.0中,可以使用闭包作为注释的检查;文档中有一个简短的文字和示例:

您可以这样表达您的示例:

@Secured(closure={
    ctx.mySecurityService.myCustomCheck(
       request.getParameter('id'))
})
返回true以允许访问


注意ApplicationContext作为ctx变量可用,请求作为请求;这是对使用SpEL时可用的其他变量和方法的补充。有关详细信息,请参阅Spring安全文档。params不可用,但您可以使用request访问值。getParameter在2.0中,您可以使用闭包作为注释的检查;文档中有一个简短的文字和示例:

您可以这样表达您的示例:

@Secured(closure={
    ctx.mySecurityService.myCustomCheck(
       request.getParameter('id'))
})
返回true以允许访问


注意ApplicationContext作为ctx变量可用,请求作为请求;这是对使用SpEL时可用的其他变量和方法的补充。有关详细信息,请参阅Spring安全文档。params不可用,但您可以使用request.getParameter访问值,这很有效,但我的做法有所不同:我设法使用@mySecurityService调用了该服务。我曾经尝试过处理请求,看看是否可以以任何方式获取params,但是如果它不可用,那么我将不得不解析web请求的URI。也许我没有很好地解释自己,或者我遗漏了什么。不会请求。getParameter'id'仅在参数如下时有效http://example.com/myController/myAction?id=1? 我已经试过了,就像你展示的那样,但是没有成功。我的身份证是http://example.com/myController/myAction/id.Right,这将是一个问题。我将添加params作为2.0final的一个可用变量,但现在您可以通过request['org.codehaus.groovy.grails.WEB_request'].paramsThanks访问它。你已经给了我足够的帮助,使这项工作暂时得以完成。这是可行的,但我的做法有所不同:我设法用@mySecurityService调用了这项服务。我曾经尝试过处理请求,看看是否可以以任何方式获取params,但是如果它不可用,那么我将不得不解析web请求的URI。也许我没有很好地解释自己,或者我遗漏了什么。不会请求。getParameter'id'仅在参数如下时有效http://example.com/myController/myAction?id=1? 我已经试过了,就像你展示的那样,但是没有成功。我的身份证是http://example.com/myController/myAction/id.Right,这将是一个问题。我将添加params作为2.0final的一个可用变量,但现在您可以通过request['org.codehaus.groovy.grails.WEB_request'].paramsThanks访问它。你已经给了我足够的帮助,使这项工作暂时得以完成。