如何在requestheader中设置CSRF令牌以传入$ .post方法调用

时间:2014-04-03 10:11:57

标签: jquery ajax spring-mvc csrf

我正在使用CSRF在Spring 3.x中工作。在Jquery调用时,需要在requesetHeader中设置标记,否则获得CSRF" null"例外。所以我试着在javascript函数中获取值并且能够在javascipt函数中获取标记值和标题值,然后我尝试使用以下功能设置标记,它们都没有工作。

方法1:

var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");

$.post(
url,
beforeSend: function(xhr){
xhr.setRequestHeader("Content-Type","application/json");
xhr.setRequestHeader("Accept","application/json");
},
$(testform).serialize(),
function(data) {
async: false;
}).done(function(data){

});

方法2:

var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");

$.post(
url,
headers: {header,token},
$(testform).serialize(),
function(data) {
async: false;
}).done(function(data){

});

请建议或帮助我解决这个问题。

使用以下代码更新

方法3:

从下面的代码中,我能够成功地击中控制器,但响应没有转发到另一个jsp。我在下面的代码中遗漏了任何内容,请告诉我。

var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");

$.post(
url,
{_csrf_header : header, _csrf : token},
$(testform).serialize(),
function(data) {
async: false;
}).done(function(data){

});

2 个答案:

答案 0 :(得分:0)

        var csrf = $('input[name="_csrf"]').val();
        var contentResult=document.getElementById('divComboProductos');
        var comercio =$("#ddlComercio").val();
        $.ajax({
            url: [[@{'/comun/productos/obtener/'}]] + comercio,
            data:  { _csrf : csrf},
            dataType:'text',
            cache:false,
            type:'POST',
            success:function(response){
                contentResult.innerHTML=response;
            }                           
        });

答案 1 :(得分:0)

您可以尝试在页面中添加这样的内容......

<meta name="_csrf" content="${_csrf.token}"/>
<meta name="_csrf_header" content="${_csrf.headerName}"/> 

看到这篇文章...... https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=jqXHR.setRequestHeader+undefined