1

我正在尝试ACL plugin在我的 grails 应用程序中使用。基于本教程中给出的示例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注释不适合调用控制器中的每个操作?

请帮忙。

4

1 回答 1

3

是的,它不适用于控制器,仅适用于服务(和其他 Spring bean)。它可能适用于 2.0 控制器中的方法,因为控制器是 Spring bean,但我还没有尝试过。

问题是 Spring Security 对闭包一无所知,因为它们是一个 Groovy 概念。它们被 Grails 调用以处理 Web 请求,但不能被 Spring 拦截,因为它仅适用于方法。

这与交易服务和关闭的问题有关。您不能在服务中定义闭包并使其具有事务性,因为 Spring 看不到它。Groovy 让您可以像调用方法一样调用闭包,但这只是语法糖。

于 2012-05-04T03:25:59.563 回答