为了确保所有表单提交和提交给服务器的所有数据都不是通过GET
我找到了这段代码
if(request.method == 'GET') {
response.sendError(405)
} else {
// the rest of the delete action goes here
}
我们可以在所有控制器扩展的基本控制器中应用它,因此代码不会在任何地方重复。
上述方法检查现有方法
我想知道有没有办法在整个应用程序中将方法设置为POST
,就像所有表单一样,所有提交的数据都应该由POST
提供。我用来设置这个的任何配置/变量?
在此先感谢您
Priyank
答案 0 :(得分:4)
一般情况下,这是allowedMethods
地图的用途;当您使用generate-controller
或generate-all
脚本时,您的控制器将具有此功能:
static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
您可以在地图中添加或删除操作名称,具体取决于哪些操作需要POST以及哪些操作允许GET。您可以将它放在基类中,并允许子类重用基类定义并使用此方法添加到它:
static allowedMethods = BaseController.allowedMethods + [createUser: "POST"]
这要求您扩展该基类,因此很容易忘记。所以更好的方法可能是使用过滤器;您可以使用create-filters
命令创建一个。
因此,例如,您可以使用这样的过滤器,并显示要禁止的操作列表:
def filters = {
postOnly(controller:'*', action: 'save|update|delete') {
before = {
if (!request.post) {
response.sendError(405)
return false
}
true
}
}
}
除了管道分隔的操作名称(您可以对控制器名称执行相同操作)之外,您还可以使用通配符,因此您可以添加以“create”开头的任何操作:
postOnly(controller:'*', action: 'save|update|delete|create*') {