在javascript POST中发送CSRF令牌时出错
在我的web应用程序中,我使用spring security3.2.x,并进行CSRF验证。在我的登录页面中,我已成功完成此操作。但是在里面,我有一个按钮,按钮动作写在javascript中在javascript POST中发送CSRF令牌时出错,javascript,spring,spring-security,csrf,csrf-protection,Javascript,Spring,Spring Security,Csrf,Csrf Protection,在我的web应用程序中,我使用spring security3.2.x,并进行CSRF验证。在我的登录页面中,我已成功完成此操作。但是在里面,我有一个按钮,按钮动作写在javascript中 $('#download').click(function(){ var paramValue = '${params}'; var params = $('#params_').clone() $('<form
$('#download').click(function(){
var paramValue = '${params}';
var params = $('#params_').clone()
$('<form target="_blank" action="report" method="post"></form>').append(params).appendTo('body').submit().remove();
});
$('#下载')。单击(函数(){
var paramValue='${params}';
var params=$('#params').clone()
$(“”).append(params.appendTo('body').submit().remove();
});
现在的问题是,当我点击该按钮时,它会出现以下错误
在请求参数“\u CSRF”或标头“X-CSRF-Token”上发现无效的CSRF令牌“null”
我认为这是因为它无法发送CSRF令牌。谁能告诉我怎么解决这个问题吗
提前感谢是的,正如您所说,这是因为您动态创建的表单不包含有效的CSRF令牌输入。发件人:
这将向ajax请求添加所需的头。是的,正如您所说,这是因为动态创建的表单不包含有效的CSRF令牌输入。发件人:
这将向ajax请求添加所需的头。是的,正如您所说,这是因为动态创建的表单不包含有效的CSRF令牌输入。发件人:
这将向ajax请求添加所需的头。是的,正如您所说,这是因为动态创建的表单不包含有效的CSRF令牌输入。发件人:
这将向您的ajax请求添加所需的头。好的,我的问题在下面一行中,我没有像正常表单提交那样发送csrf令牌
$('<form target="_blank" action="report" method="post"></form>').append(params).appendTo('body').submit().remove();
$(“”).append(params.appendTo('body').submit().remove();
所以我所做的就是创建了隐藏字段并像下面那样插入它
<script type="text/javascript">
$(document).ready(function () {
$('#download').click(function(){
var params = $('#params_').clone();
var csrftoken = $("#csrftoken_").clone();
$('<form target="_blank" action="report" method="post"></form>')
.append(params)
.append(csrftoken)
.appendTo('body')
.submit()
.remove();
});
});
</script>
<input type='hidden' id='params_' name='params' value='${params}' />
<input type="hidden" id="csrftoken_" name="${_csrf.parameterName}" value="${_csrf.token}" />
$(文档).ready(函数(){
$('#下载')。单击(函数(){
var params=$('#params').clone();
var csrftoken=$(“#csrftoken”).clone();
$('')
.append(参数)
.append(csrftoken)
.appendTo('正文')
.提交()
.remove();
});
});
这很有效……好的,我的问题是在下面的一行中,我没有像正常表单提交一样发送csrf令牌
$('<form target="_blank" action="report" method="post"></form>').append(params).appendTo('body').submit().remove();
$(“”).append(params.appendTo('body').submit().remove();
所以我所做的就是创建了隐藏字段并像下面那样插入它
<script type="text/javascript">
$(document).ready(function () {
$('#download').click(function(){
var params = $('#params_').clone();
var csrftoken = $("#csrftoken_").clone();
$('<form target="_blank" action="report" method="post"></form>')
.append(params)
.append(csrftoken)
.appendTo('body')
.submit()
.remove();
});
});
</script>
<input type='hidden' id='params_' name='params' value='${params}' />
<input type="hidden" id="csrftoken_" name="${_csrf.parameterName}" value="${_csrf.token}" />
$(文档).ready(函数(){
$('#下载')。单击(函数(){
var params=$('#params').clone();
var csrftoken=$(“#csrftoken”).clone();
$('')
.append(参数)
.append(csrftoken)
.appendTo('正文')
.提交()
.remove();
});
});
这很有效……好的,我的问题是在下面的一行中,我没有像正常表单提交一样发送csrf令牌
$('<form target="_blank" action="report" method="post"></form>').append(params).appendTo('body').submit().remove();
$(“”).append(params.appendTo('body').submit().remove();
所以我所做的就是创建了隐藏字段并像下面那样插入它
<script type="text/javascript">
$(document).ready(function () {
$('#download').click(function(){
var params = $('#params_').clone();
var csrftoken = $("#csrftoken_").clone();
$('<form target="_blank" action="report" method="post"></form>')
.append(params)
.append(csrftoken)
.appendTo('body')
.submit()
.remove();
});
});
</script>
<input type='hidden' id='params_' name='params' value='${params}' />
<input type="hidden" id="csrftoken_" name="${_csrf.parameterName}" value="${_csrf.token}" />
$(文档).ready(函数(){
$('#下载')。单击(函数(){
var params=$('#params').clone();
var csrftoken=$(“#csrftoken”).clone();
$('')
.append(参数)
.append(csrftoken)
.appendTo('正文')
.提交()
.remove();
});
});
这很有效……好的,我的问题是在下面的一行中,我没有像正常表单提交一样发送csrf令牌
$('<form target="_blank" action="report" method="post"></form>').append(params).appendTo('body').submit().remove();
$(“”).append(params.appendTo('body').submit().remove();
所以我所做的就是创建了隐藏字段并像下面那样插入它
<script type="text/javascript">
$(document).ready(function () {
$('#download').click(function(){
var params = $('#params_').clone();
var csrftoken = $("#csrftoken_").clone();
$('<form target="_blank" action="report" method="post"></form>')
.append(params)
.append(csrftoken)
.appendTo('body')
.submit()
.remove();
});
});
</script>
<input type='hidden' id='params_' name='params' value='${params}' />
<input type="hidden" id="csrftoken_" name="${_csrf.parameterName}" value="${_csrf.token}" />
$(文档).ready(函数(){
$('#下载')。单击(函数(){
var params=$('#params').clone();
var csrftoken=$(“#csrftoken”).clone();
$('')
.append(参数)
.append(csrftoken)
.appendTo('正文')
.提交()
.remove();
});
});
这很有效……您在ajax请求头中看到这个头了吗?找到了答案。检查我给出的答案,你是对的。这不是一个ajax请求,不知道为什么我看不到。您在ajax请求头中看到这个头了吗?找到了答案。检查我给出的答案,你是对的。这不是一个ajax请求,不知道为什么我看不到。您在ajax请求头中看到这个头了吗?找到了答案。检查我给出的答案,你是对的。这不是一个ajax请求,不知道为什么我看不到。您在ajax请求头中看到这个头了吗?找到了答案。检查我给出的答案,你是对的。这不是ajax请求,不知道为什么我看不到。