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

Posted

技术标签:

【中文标题】如何使用 _csrf 在 angularjs 中发送 POST 请求?【英文标题】:How send POST request in angularjs with _csrf? 【发布时间】:2016-01-06 09:23:52 【问题描述】:

我想在 Spring Security 下发送 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");
);

它总是写“不”。

我认为,需要将变量作为 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

请帮帮我!

【问题讨论】:

这可能会有所帮助:[***.com/questions/18156452/… 不,不要帮忙,谢谢 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

我解决了这个)

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 在 angularjs 中发送 POST 请求?的主要内容,如果未能解决你的问题,请参考以下文章

将 AngularJS 与 SpringSecurity3.2 一起用于 CSRF

如何使用 Django 和 AngularJS 创建 POST 请求(包括 CSRF 令牌)

Laravel 5.1/AngularJS:在 Angular 视图中重置密码(如何验证 CSRF 令牌?)

Spring MVC 4 AngularJS 1.3 HTTP POST 具有空 CSRF 令牌或标头

如何将 CSRF 令牌从 AngularJS 前端发送到 Spring REST 服务后端?

如何将包含 CSRF 令牌的数据从 angularjs 控制器提交到 REST 控制器?