我正在使用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){
});
答案 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