如何在ExtJS ajax调用中添加csrf令牌?

时间:2017-11-27 10:58:46

标签: ajax jsp extjs csrf csrf-protection

在我的应用程序中,我使用Ext JS 5.1同时拥有JSP和JS。我需要对我的应用程序应用spring csrf保护。 在Jsp我能够添加如下:

 <body>
            <input type="hidden" name="${_csrf.parameterName}"  value="${_csrf.token}">
    </body>

但我不知道如何在.js文件中执行此操作?我是否也为ext js声明了Meta标签?我需要将csrf标记应用于每个ajax请求。

为了突出显示,我扫描了许多网站,但没有得到任何正确的解释或工作示例。如何在Ext js .js文件的ajax调用中添加csrf?

1 个答案:

答案 0 :(得分:-1)

我能够做到如下。将以下代码段添加到ext js应用程序的app.js或Application.js。

Ext.Ajax.on('beforerequest', function(conn, options) {
    var x = document.getElementsByTagName("META");
    var token = "";
    var headerVal = "";
    var i;
    for (i = 0; i < x.length; i++) {
        if (x[i].name == "_csrf") {
            token = x[i].content;
        } else if (x[i].name == "_csrf_header") {
            headerVal = x[i].content;
        }
    }

    Ext.Ajax.setDefaultHeaders({
        headerVal: token
    });
});

OR

Ext.Ajax.on('beforerequest', function(conn, options) {
    var x = document.getElementsByTagName("META");
    var token = "";
    var headerVal = ""; 
    var i;
    for (i = 0; i < x.length; i++) {
        if (x[i].name == "_csrf")
        {
             token = x[i].content;
        }
    }

   // Ext.Ajax.defaultHeaders = Ext.apply(Ext.Ajax.defaultHeaders || {}, { headerVal : token });
    Ext.Ajax.setDefaultHeaders({
        'X-CSRF-TOKEN':token
    });
});