防止Grails Controller中的方法作为操作公开

Phi*_*enn 13 grails groovy grails-2.0

我目前正在阅读并使用Scott Davis和Jason Rudolph撰写的Grails入门版第二版中的示例.

这本书是用Grails 1.2编写的.

他们有一个代码示例,他们在这里创建一个debug()被调用的方法,beforeInterceptor并解释说,既然debug()是一个方法,它就不会通过URL暴露给用户.他们解释说,Closures作为Controller Actions暴露给最终用户,但方法却没有.

我还在Grails 1.3文档中看到,他们提到了常规方法:

def auth() { ... } 
Run Code Online (Sandbox Code Playgroud)

被视为私有,因为它是一个方法,而不是一个闭包.从Grails 1.3开始就是如此.

但是,从Grails 2.0.0开始,Controller Actions可以作为方法和闭包实现.

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

我想到了两种可能的方法,并且想知道哪种风格/做法更好,为什么?

  1. 将访问者设置为私有,即 private def auth()
  2. 为该方法设置allowedMethods以清空字符串:

    static allowedMethods = [save: "POST", update: "POST", delete: "POST", auth: ""]
    
    Run Code Online (Sandbox Code Playgroud)

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

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

sch*_*159 15

在Grails 2.0中,任何标记为私有或受保护的方法都不被视为操作.

以这种方式标记方法会因维护原因而提供更多信息,因为它在方法声明中是可见的,方法是否可操作而不必回顾allowedMethods变量.此外,如果删除或未添加声明,则无法访问不可访问的方法allowedMethods.