我正在尝试在grails应用程序中使用ACL plugin
。根据本教程中给出的示例http://grails-plugins.github.com/grails-spring-security-acl/docs/manual/guide/3.%20Tutorial.html,我需要创建一个Service
来实现注释@PreAuthorize, @PostAuthorize, @PreFilter, and @PostFilter
。
我想在我的控制器中实现这种方法,而不是创建服务。我尝试在操作顶部使用@PreAuthorize
,但它会返回错误消息:
Annotation @org.springframework.security.access.prepost.PreAuthorize is not allowed on element FIELD
这是否意味着,@PreAuthorize
注释不适合调用控制器中的每个动作?
请帮忙。
答案 0 :(得分:3)
是的,它不适用于控制器,仅适用于服务(和其他Spring bean)。它可能适用于2.0控制器中的方法,因为控制器是Spring bean,但我还没试过。
问题是Spring Security对闭包一无所知,因为它们是一个Groovy概念。它们被调用来处理Grails的Web请求,但不能被Spring拦截,因为它只适用于方法。
这与交易服务和关闭问题有关。你不能在服务中定义一个闭包,并且它是事务性的,因为Spring没有看到它。 Groovy允许你调用闭包就像它们是方法一样,但它只是语法糖。