Grails 如何在@Secured表达式中使用服务方法?

Grails 如何在@Secured表达式中使用服务方法?,grails,groovy,spring-security,Grails,Groovy,Spring Security,我正在将Grails与springsecuritycore:2.0-RC4 我试图在@Secured表达式中执行一些自定义安全检查,如下所示: import grails.plugin.springsecurity.annotation.Secured; class AdminController { def myCustomSecService; @Secured("@myCustomSecService.customCheck()") def index() {

我正在将
Grails
springsecuritycore:2.0-RC4

我试图在@Secured表达式中执行一些自定义安全检查,如下所示:

import grails.plugin.springsecurity.annotation.Secured;

class AdminController {
    def myCustomSecService;

    @Secured("@myCustomSecService.customCheck()")
    def index() {
        render(view:"index")
    }
}
这似乎根本不起作用。 我见过类似的
@PreAuthorize
,但是(显然)需要
spring-security-acl
插件,我希望避免使用它(除非我真的必须这样做)

奇怪的是,
spring-security-core
插件包含了一个
jar
,它同时带有
@PreAuthorize
@PostAuthorize
注释


我该怎么做呢?

经过深入研究,我想我已经找到了解决办法

我在某处看到,如果我在使用Spring时必须重写类和方法,我可能是做错了什么

我所需要做的就是将@Component添加到我的服务中

这是我来的时候我做的:

我的控制器:

import grails.plugin.springsecurity.annotation.Secured;

class AdminController {
    def myCustomSecService;

    @Secured("@myCustomSecService.customCheck()")
    def index() {
        render(view:"index")
    }
}
我的服务:

import org.springframework.stereotype.Component;

@Component("myCustomSecService")
class MyCustomSecService {
    def customCheck() {
        /*do checks here*/
        return true;
    }
}

一个选项是用您自己的实现替换默认的
AuthenticationProvider
bean。请看这篇博客文章和附带的示例应用程序以了解详细信息:如果有用,我会看一看并发布一些结果!谢谢:)我知道如何使用该示例,但它似乎会隐藏支票的类型。如果我能够直接访问服务,只需查看
@Secured
注释,我就知道该控制器是如何被保护的。与
@Secured
方案相比,如果自定义检查“隐藏”在您自己的
身份验证提供程序中,则执行的自定义检查确实不那么明显。但是,
AuthenticationProvider
解决方案应该可以工作,而
@Secured
解决方案不能工作。您认为
@Secured
不能工作是什么意思?他们说它应该能够接受一个SpEL表达式。它所需要的只是一个类似于bean解析器的东西来找出我想要调用的服务是什么。。。正当