是否可以破解 spring-security-core 插件@Secured注释,以便能够引用提供给控制器的请求参数



我正在使用Grails 2.3.3spring-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访问值

最新更新