grails - 防止 Grails Controller 中的方法暴露为操作

标签 grails groovy grails-2.0

我目前正在阅读和处理 Getting Started with Grails, Second Edition by Scott Davis & Jason Rudolph 中的示例.

本书是使用 Grails 1.2 编写的。

他们有一个代码示例,可以在其中创建 debug() beforeInterceptor 调用的方法并解释说自从 debug()是一种方法,它不会通过 URL 暴露给用户。他们解释说,闭包作为 Controller Action 暴露给最终用户,但方法不是。

我也在 Grails 1.3 documentation 上看到了,他们提到了一个常规的方法:

def auth() { ... } 

被视为私有(private)的,因为它是一种方法,而不是闭包。从 Grails 1.3 开始就是这样。

但是,从 Grails 2.0.0 开始,Controller Actions can be implemented as both methods and closures .

这让我想知道(并试图找出)一种方法来复制 Grails 2.0.0 之前的可用功能,即在 Controller 中创建一个不会暴露给最终用户的方法。

我想到了 2 种可能的方法,想知道哪种方式/实践更好,为什么?
  • 将访问器设置为私有(private),即 private def auth()
  • 将方法的 allowedMethods 设置为空字符串:
    static allowedMethods = [save: "POST", update: "POST", delete: "POST", auth: ""]
    

  • 这两种方法似乎都达到了预期的效果。但是,第一种方法给出了 HTTP 错误代码 404,而第二种方法给出了 HTTP 错误代码 405。

    有谁知道哪种方法更可取?此外,还有其他方法或“最佳实践技术”吗?

    最佳答案

    在 Grails 2.0 中,任何标记为私有(private)或 protected 方法都不会被视为操作。

    出于维护原因,以这种方式标记方法会提供更多信息,因为在方法声明中可以看到该方法是否可操作,而不必回头查看 allowedMethods。多变的。此外,如果一个不可访问的方法的声明被删除或未添加到 allowedMethods,则不会意外地使其可访问。 .

    关于grails - 防止 Grails Controller 中的方法暴露为操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12115951/

    相关文章:

    Jenkins管道条件阶段,使用 "When"作为选择参数

    hibernate - 如何编写此Grails GORM Hibernate查询

    Grails 资源插件断言失败

    Grails 对象关系,其中拥有方没有对其所有者的引用

    Grails GORM 绑定(bind)字段两次

    grails - Groovy 方法重载

    Groovy 字符串执行与列表执行

    grails - 如何在 GSP 中使用 Spring Security Grails 插件获取 current_user

    grails - Grails-将Joda日期呈现为JSON时发生异常

    java - 从我的应用程序中访问 JVM 的内存使用情况?