gpt4 book ai didi

grails - 确保没有请求通过应用程序中的GET方法

转载 作者:行者123 更新时间:2023-12-02 14:20:49 25 4
gpt4 key购买 nike

为了确保所有表单提交和所有提交给服务器的数据都没有通过GET,我找到了这段代码

if(request.method == 'GET') {
response.sendError(405)
} else {
// the rest of the delete action goes here
}

我们可以将其应用到由所有 Controller 扩展的外部 Controller 中,因此,代码不会在各处重复。
以上方法检查现有方法
我想知道是否有一种方法可以在整个应用程序中将方法设置为 POST,就像所有表单和提交的所有数据都应该由 POST一样。我用来设置此的任何配置/变量?

提前致谢
普里扬克

最佳答案

通常,这就是allowedMethods映射的用途;当您使用generate-controllergenerate-all脚本时, Controller 将具有以下内容:

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

并且您可以根据哪些操作需要POST和允许GET来从 map 中添加或删除操作名称。您可以将其放在基类中,并允许子类重用基类定义,并使用此方法添加到基类定义中:
static allowedMethods = BaseController.allowedMethods + [createUser: "POST"]

这就要求您扩展该基类,因此很容易忘记。因此,更好的方法可能是使用过滤器。您可以使用 create-filters命令创建一个。

因此,例如,您可能具有这样的过滤器,其中包含要禁止的明确 Action 列表:
def filters = {
postOnly(controller:'*', action: 'save|update|delete') {
before = {
if (!request.post) {
response.sendError(405)
return false
}
true
}
}
}

除了用竖线分隔的 Action 名称(您可以对 Controller 名称进行相同的操作)之外,您还可以使用通配符,因此您可以添加以'create'开头的任何 Action :
   postOnly(controller:'*', action: 'save|update|delete|create*') {

关于grails - 确保没有请求通过应用程序中的GET方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10049957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com