如何使用 _csrf 在 angularjs 中发送 POST 请求?

How send POST request in angularjs with _csrf?

我想在 spring 安全下发送 POST 服务请求。 如果我使用表单提交(带有隐藏输入) - 它工作正常。 但我不知道,如何使用 $http.post 发送请求。 我的表格:

<form method="POST" type="submit" action="http://localhost:8888/rest/post1" />
    <button>345</button>
    <input name="${_csrf.parameterName}"
           value="${_csrf.token}" />
</form>

有效。

我保存参数:

<script>
        var a = "${_csrf.parameterName}";
        var b = "${_csrf.token}";
</script>

我的 ng-click 函数:

$http.post('http://localhost:8888/rest/post1', {"_csrf": b}, {
    "headers" :
    { "_csrf" : b }
}).success(function(data) {
    console.log("ok");

}).error(function(){

    console.log("no");
});

它总是写 "no"。

我想,这需要将变量作为 webForm 发送,但是如何在 $http.post 中发送?

提琴手写:Content-Type is 'application/json'; this inspector supports 'x-www-form-urlencoded' only

服务器控制台:

org.springframework.web.servlet.PageNotFound handleHttpRequestMethodNotSupported
WARNING: Request method 'POST' not supported

请帮帮我!

我解决了这个)

var request = $http({
    method: "post",
    url: "http://localhost:8888/rest/post1",
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    transformRequest: function(){return a+"="+b;},
    data: {}
});

您可能需要在请求中设置“_csrf”header。您将其作为方法的参数传递。这行不通。我不太了解 angular.js 但您必须需要将其作为请求 header 或请求负载传递。我找到了一些参考。开始了:

$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';

希望这能帮助您解决问题。干杯!!!