use*_*782 21 jquery post spring-mvc http-status-code-403
我想使用$ .POST进行ajax调用.但我得到403错误.但GET工作得非常好.我的代码是:
var url = "/xyz/abc/subscribe?name="+name;
$.post(url, function(data){
alert(data);
});
Run Code Online (Sandbox Code Playgroud)
控制器代码是:
@RequestMapping(value = "/xyz/abc/subscribe", method = RequestMethod.POST)
public @ResponseBody
String subscribe(@RequestParam("name") String name)
throws Exception {
String message = "TESTING";
return message;
}
Run Code Online (Sandbox Code Playgroud)
但是我收到403错误.
Emi*_*ano 81
使用Spring Security with Java配置,默认情况下启用CSRF保护.在此上下文中,如果使用POST方法向REST端点发出Ajax请求,则会出现csrf令牌丢失错误.
要解决这个问题,有两种选择:
选项1:禁用csrf
@Override
protected void configure (HttpSecurity http) throws Exception {
http.csrf().disable();
}
Run Code Online (Sandbox Code Playgroud)
选项2:将csrf添加到ajax请求中.看到这里
您可能希望将csrf标记添加到请求中.
使用JSTL获取令牌应该非常简单.如果你正在使用Thymeleaf,这里是如何获得它.
<script th:inline="javascript">
/*<![CDATA[*/
var _csrf_token = /*[[${_csrf.token}]]*/ '';
var _csrf_param_name = /*[[${_csrf.parameterName}]]*/ '';
/*]]>*/
</script>
Run Code Online (Sandbox Code Playgroud)
然后,将其添加到您的请求中:
var requestData = {
'paramA': paramA,
'paramB': paramB,
};
requestData[_csrf_param_name] = _csrf_token; // Adds the token
$.ajax({
type: 'POST',
url: '...your url...',
data: requestData,
...
});
Run Code Online (Sandbox Code Playgroud)
如果一切顺利,请求应该包括类似_csrf:1556bced-b323-4a23-ba1d-5d15428d29fa(csrf令牌),你将得到200而不是403.
这是一个没有禁用 CSRF 的例子。
第 1 步:在您的标头中添加 CSRF,如下所示
<meta th:name="${_csrf.parameterName}" th:content="${_csrf.token}"/>
Run Code Online (Sandbox Code Playgroud)
第 2 步:使用令牌拨打电话
$( "#create_something" ).click(function() {
var token = $("meta[name='_csrf']").attr("content");
$.ajax({
url : '/xxxxxxxxxxxx', // url to make request
headers: {"X-CSRF-TOKEN": token}, //send CSRF token in header
type : 'POST',
success : function(result) {
alert(result);
}
})
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34674 次 |
| 最近记录: |