【问题标题】:How to use ACL plugin?如何使用 ACL 插件?
【发布时间】:2012-05-13 14:33:07
【问题描述】:

我正在尝试在我的 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 注释不适合调用控制器中的每个操作?

请帮忙。

【问题讨论】:

    标签: grails groovy spring-security acl


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢!所以这意味着我别无选择,只能为每个控制器创建一个服务,以便我使用 ACL 插件。我还有一个问题,除了使用 ACL 插件之外,还有其他方法可以为每个操作分配权限吗?非常感谢!
    • 控制器和服务之间不需要1-1;由于逻辑相似,您也许可以将所有内容放在一个服务中,但肯定有几个就足够了。
    • 非常感谢..是否有可能不是为我创建服务来使用提到的注释,而是将我的控制器中的操作转换为方法?这是一种合乎逻辑的方法吗?
    • 您能否发布一个实现该方法的示例?这将是一个非常大的帮助,尤其是对于那些仍然是 groovy 新手的人。请考虑。非常感谢!
    猜你喜欢
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多