我会在这里阅读一些建议。不幸的是,这些建议无法解决我的问题。 GET数据没有问题,但是POST数据不起作用。 尝试提取数据后返回403-禁止。 在Spring Boot中的configure-method中禁用CSRF时...
http.csrf().disable();
...一切正常。但这不是我要寻找的解决方案。
fetch('http://IP:PORT/path', {
method: 'POST',
headers: new Headers({
'Accept': 'application/json',
'Content-Type': 'application/json'
}),
body: JSON.stringify(myBody),
credentials: 'same-origin'
}).then(response => response.json())
.then(response => console.log(response))
.catch(error=>
console.log(error)
);
凭据:“相同来源”或“包含”都无助于解决问题。我希望在这里找到帮助,否则我必须禁用csrf:/
答案 0 :(得分:0)
我找到了article that solves the problem。应该可以使用Laravel(PHP)来解决同一问题,但可以轻松地对其进行修改。
您需要做的是在页面上包含带有CSRF令牌的元标记 像这样:
<meta name="_csrf" content="${_csrf.token}" />
然后在发布数据时将其包括在标题中 像这样:
let token = document.querySelector("meta[name='_csrf']").content;
fetch('http://IP:PORT/path', {
method: 'POST',
headers: new Headers({
'X-CSRF-TOKEN': token,
'Accept': 'application/json',
'Content-Type': 'application/json'
}),
body: JSON.stringify(myBody),
credentials: 'same-origin'
})... rest of your code ...
通过这种方式,您将令牌发送到控制器,因此,您基本上没有问题,因为您的工作基本上与提交“正常”表单相同。