防止Grails控制器中的方法作为操作公开
我目前正在通读并使用中的示例 这本书是使用Grails1.2编写的 他们有一个代码示例,其中创建了一个防止Grails控制器中的方法作为操作公开,grails,groovy,grails-2.0,Grails,Groovy,Grails 2.0,我目前正在通读并使用中的示例 这本书是使用Grails1.2编写的 他们有一个代码示例,其中创建了一个debug()方法,该方法由beforeInterceptor调用,并解释说,由于debug()是一个方法,因此不会通过URL向用户公开。它们解释了闭包是作为控制器动作向最终用户公开的,而方法则不是 我还看到了,他们暗指一种常规方法: def auth() { ... } 被视为私有的,因为它是一个方法,而不是闭包。在Grails1.3中也是如此 但是,从Grails2.0.0开始 这让我想
debug()
方法,该方法由beforeInterceptor
调用,并解释说,由于debug()
是一个方法,因此不会通过URL向用户公开。它们解释了闭包是作为控制器动作向最终用户公开的,而方法则不是
我还看到了,他们暗指一种常规方法:
def auth() { ... }
被视为私有的,因为它是一个方法,而不是闭包。在Grails1.3中也是如此
但是,从Grails2.0.0开始
这让我想知道(并试图找到)一种方法来复制Grails2.0.0之前版本中提供的功能,即在控制器中创建一个不会向最终用户公开的方法
我想到了两种可能的方法,想知道哪种风格/实践更好,为什么
private def auth()
static allowedMethods = [save: "POST", update: "POST", delete: "POST", auth: ""]
有人知道哪种方法更可取吗?此外,是否有其他方法或“最佳实践技术”来实现这一点 最好将其标记为private,因为404隐藏了405可以用来知道有一个函数调用它的任何东西。(这并不是说它会有多大用处。)
另外,将方法标记为private也很好,因为它在方法上表明它不是一个动作。在Grails2.0中,任何标记为private或protected的方法都不被视为动作
以这种方式标记一个方法对于维护来说会提供更多的信息,因为在方法声明中可以看到该方法是否可操作,而不必回顾
allowedMethods
变量。此外,如果一个不可访问的方法的声明被删除或没有添加到allowedMethods
+1,那么它不会意外地被访问,不应该被公开的方法不应该被“公开”,而不是“不允许”。