我正在尝试从.js文件中发送隐藏的表单元素,因此它会进入控制器并在它之间抛出异常,CSRF令牌无效。
$(document.body).append(form);
$(form).attr("action", "/controller_path");
$(form).attr("method", "POST");
var input = $("<input>").attr("type", "hidden").attr("name","payment_prim_customer").val(payment_prim_customer);
$(form).append($(input));
$(form).submit();
请建议如何处理?
我的.JSP文件中添加了CSRF令牌
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
答案 0 :(得分:1)
在元标记中包含CSRF令牌。
<html>
<head>
<meta name="_csrf" content="${_csrf.token}"/>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" content="${_csrf.headerName}"/>
<!-- ... -->
</head>
最后试试这个:
$(document.body).append(form);
$(form).attr("action", "/controller_path");
$(form).attr("method", "POST");
var input = $("<input>").attr("type", "hidden").attr("name","payment_prim_customer").val(payment_prim_customer);
$(form).append($(input));
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
var csrf_input = $("<input>").attr("type", "hidden").attr("name",'_csrf').val(token);
$(form).append($(csrf_input ));
$(form).submit();
答案 1 :(得分:0)
因为您在Js中使用它,您可能需要使用csrfTokenRepository,然后从cookie中检索值。您可以在配置中添加类似的内容:
.and().csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
然后从名为X-XSRF-TOKEN
的cookie中检索令牌