我希望在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
请帮帮我!
答案 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: {}
});