Grails 确保应用程序中没有通过GET方法发送请求

Grails 确保应用程序中没有通过GET方法发送请求,grails,block,http-get,Grails,Block,Http Get,为了确保所有表单提交和提交到服务器的所有数据都不是通过GET,我找到了这段代码 if(request.method == 'GET') { response.sendError(405) } else { // the rest of the delete action goes here } 我们可以应用这个由所有控制器扩展的in-out基本控制器,因此代码不会到处重复。 上述方法检查现有方法 我想知道是否有一种方法可以在整个应用程序中设置POST方法

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

if(request.method == 'GET') {
      response.sendError(405)
    } else {
      // the rest of the delete action goes here
    }
我们可以应用这个由所有控制器扩展的in-out基本控制器,因此代码不会到处重复。 上述方法检查现有方法 我想知道是否有一种方法可以在整个应用程序中设置POST方法,就像所有表单和所有提交的数据都应该通过POST方式一样。我用什么配置/变量来设置这个? 提前谢谢
Priyank

一般来说,这就是allowedMethods地图的用途;使用“生成控制器”或“生成所有脚本”时,控制器将具有以下功能:

static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
根据哪些操作需要POST和哪些允许GET,您可以从映射中添加或删除操作名称。您可以将其放在基类中,并允许子类重用基类定义,并使用以下方法将其添加到基类中:

static allowedMethods = BaseController.allowedMethods + [createUser: "POST"]
这需要扩展基类,所以很容易忘记。因此,更好的方法可能是使用过滤器;可以使用“创建过滤器”命令创建一个过滤器

例如,您可以使用这样一个过滤器,其中包含一个明确的不允许操作列表:

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*') {

一般来说,这就是allowedMethods映射的用途;使用“生成控制器”或“生成所有脚本”时,控制器将具有以下功能:

static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
根据哪些操作需要POST和哪些允许GET,您可以从映射中添加或删除操作名称。您可以将其放在基类中,并允许子类重用基类定义,并使用以下方法将其添加到基类中:

static allowedMethods = BaseController.allowedMethods + [createUser: "POST"]
这需要扩展基类,所以很容易忘记。因此,更好的方法可能是使用过滤器;可以使用“创建过滤器”命令创建一个过滤器

例如,您可以使用这样一个过滤器,其中包含一个明确的不允许操作列表:

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*') {

谢谢伯特的解决方案。是的,我们计划从基本控制器转移到过滤器,但我们在基本控制器中还有一些其他调用,如请求中所有参数的sanitizer插件调用等。我们目前无法取出基本控制器。关于一些不相关的问题,我想知道是否有人成功地将HDIV API集成到grailsThanks Burt中,以获得解决方案。是的,我们计划从基本控制器转移到过滤器,但我们在基本控制器中还有一些其他调用,如请求中所有参数的sanitizer插件调用等。我们目前无法取出基本控制器。关于一些无关的问题,我想知道是否有人成功地将HDIVAPI集成到grails中