1

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

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

我们可以将它应用到由所有控制器扩展的基本控制器中,因此代码不会在任何地方重复。以上方法检查现有方法我想知道有没有办法在POST整个应用程序中设置方法,就像所有表单和提交的所有数据都应该是POST. 我用来设置的任何配置/变量?
提前
致谢

4

1 回答 1

4

一般来说,这就是allowedMethods地图的用途;当您使用generate-controllerorgenerate-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*') {
于 2012-04-06T23:08:46.033 回答