grails中的CSRF,withForm {}。invalidToken {}无法正常工作

时间:2016-10-20 10:53:27

标签: security grails csrf

由于我在grails应用程序中使用了csrf,我通过在withForm{...}.invalidToken{....}下封装我的操作逻辑来实现,同时我还添加了一个属性:{{1在gsp。{/ p>中的g:formRemote useToken="true"标记下

问题是,我总是在提交时进入g:formRemote块,因此我的表单没有被保存。

我应该如何使其正常工作?

示例:

invalidToken{...}

gsp ex:

def action = {

       withForm{

             ......
  }.invalidToken{

          println "Invalid Token code"    

    }


}

1 个答案:

答案 0 :(得分:0)

useToken不支持

formRemote。请查看https://github.com/grails/grails-core/blob/2.5.x/grails-plugin-gsp/src/main/groovy/org/codehaus/groovy/grails/plugins/web/taglib/JavascriptTagLib.groovy#L349

formRemote支持的属性为:

     * @attr name REQUIRED The form name
     * @attr url REQUIRED The url to submit to as either a map (containing values for the controller, action, id, and params) or a URL string
     * @attr action The action to execute as a fallback, defaults to the url if non specified
     * @attr update Either a map containing the elements to update for 'success' or 'failure' states, or a string with the element to update in which cause failure events would be ignored
     * @attr before The javascript function to call before the remote function call
     * @attr after The javascript function to call after the remote function call
     * @attr asynchronous Whether to do the call asynchronously or not (defaults to true)
     * @attr method The method to use the execute the call (defaults to "post")

随着说。您可以继续使用控制器中的withForm并使用jQuery或其他JS库实现表单提交并发送令牌。请看一下这个问题:Grails - Is there a recommended way of dealing with CSRF attacks in AJAX forms?

我还建议您继续使用formRemote之类的标签。我假设你至少使用Grails 2.x.如果您希望将来迁移到Grails 3.x,则不推荐使用与Ajax相关的标记。

希望这有帮助。