加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

防止Grails控制器中的方法被暴露为动作

发布时间:2020-12-14 16:34:42 所属栏目:大数据 来源:网络整理
导读:我正在 Getting Started with Grails,Second Edition by Scott Davis Jason Rudolph中阅读并处理这些例子. 这本书是用Grails 1.2编写的. 他们有一个代码示例,它们创建一个由beforeInterceptor调用的debug()方法,并解释说,由于debug()是一种方法,它不会通过UR
我正在 Getting Started with Grails,Second Edition by Scott Davis & Jason Rudolph中阅读并处理这些例子.

这本书是用Grails 1.2编写的.

他们有一个代码示例,它们创建一个由beforeInterceptor调用的debug()方法,并解释说,由于debug()是一种方法,它不会通过URL向用户公开.他们解释说,封闭作为控制器操作暴露给最终用户,但方法不是.

我也看到了Grails 1.3 documentation,他们暗示了一个常规的方法:

def auth() { ... }

被视为私有的,因为它是一种方法,而不是封闭. Grails 1.3是如此.

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

这导致我想知道(并尝试找出)一种复制在Grails 2.0.0中可用的功能的方法,以便在Controller中创建一个不会暴露给最终用户的方法.

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

>将访问者设置为私有,即private def auth()
>将allowMethods的方法设置为空字符串:

static allowedMethods = [save: "POST",update: "POST",delete: "POST",auth: ""]

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

有人知道哪种方法会更好吗?另外还有其他办法,还是有这样做的“最佳做法技巧”?

解决方法

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

以这种方式标记方法对于维护的原因将更加翔实,因为在方法声明中可以看到该方法是否可操作,而不必回头看看allowedMethods变量.此外,如果将其声明删除或未添加到allowedMethods,则不可访问的方法将不会被意外地访问.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读