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解析器的东西来找出我想要调用的服务是什么。。。正当