Grails withForm,出错时重置令牌?

Grails withForm, reset token on error?

目前正在使用 grails 2.2.2

我一直在尝试在我的应用程序中实施令牌,但遇到了这个问题。我们尽量避免重新呈现页面,因为它可能非常慢,所以我们 return JSON 代替。以下是我们使用的基本控制器调用,但我不确定我应该如何处理 reset/get 新令牌。

public saveThing(ThingCommand cmd) {
    Map model = [:]
    withForm {
        try {
            thingService.saveThing(cmd)
            model.success = true
        } catch (Exception e) {
            model.error = true //any validation errors or anything else
            // RESET TOKEN HERE/GET NEW TOKEN?
        }
    }.invalidToken {
        model.invalidToken = true
    }
    render model as JSON
}

根据我的理解,一旦执行 withForm 闭包,令牌就会被丢弃。这会导致一个问题,因为我实际上并没有重新呈现似乎是生成新令牌的正常方式的表单。我如何手动执行此操作或是否有更简单的方法(插件?)

谢谢!

通过 withForm 的表单令牌不适用于 AJAX 请求。它们设计用于 HTML 表单和 POST 重新呈现表单并为表单生成新令牌的请求。

为了使它们能够处理 JSON/AJAX 请求,您需要在处理请求和拒绝请求时实现自己的令牌生成。一个好的起点是查看测试 withFormold tests。这应该让您了解如何创建和存储令牌。