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

时间:2015-10-08 16:23:46

标签: angularjs jsp spring-security csrf

我希望在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>

它有效。

我保存了params:

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

我的点击功能:

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

}).error(function(){

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

它始终在写#34;没有&#34;。

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

Fiddler写道: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

请帮帮我!

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

我解决了这个问题)

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: {}
});