. p o s t 或 者 其 他 的 .post 或者其他的 .post或者其他的.ajax请求不能访问后台,代码都是对的,但是请求都到不了后台,经过了多方排查,花了几个小时我终于知道了原因。记录一下。
在看浏览器的html代码时发现了有一个隐藏表单
原来是我使用了Spring Security
Spring Security 4.0之后,引入了CSRF,默认是开启。不得不说,CSRF和RESTful技术有冲突。CSRF默认支持的方法: GET|HEAD|TRACE|OPTIONS,不支持POST。
也就是说POST的请求需要验证。
解决:
前端页面
<!--在HTML页面加上,也可以搞个隐藏域来-->
<!-- CSRF -->
<meta name="_csrf" th:content="${_csrf.token}"/>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" th:content="${_csrf.headerName}"/>
js
$("#username").change(function () {
// 获取 CSRF Token
var csrfToken = $("meta[name='_csrf']").attr("content");
var csrfHeader = $("meta[name='_csrf_header']").attr("content");
var username1 = $(this).val();
username1 = $.trim(username1);
$.ajax({
url: "http://localhost:8080/cwblog/user/ajaxValidateUsername",
type: "post",
data: {
"username": username1,
"date": new Date()
},
beforeSend: function(request) {
request.setRequestHeader(csrfHeader, csrfToken); // 添加 CSRF Token
},
success: function(data){
alert("post中");
alert(typeof data);
alert(data);
if (data.toString() == "0") {
alert("用户名已被占用");
} else {
alert("error");
}
},
error : function() {
alert("error!");
}
});
});