【发布时间】:2016-03-25 10:41:54
【问题描述】:
如何使用 jQuery 和 Spring Security 在所有 Ajax 请求中包含令牌?
目前我收到以下错误
未捕获的类型错误:无法读取未定义的属性“toLowerCase”
Javascript:
function editUser(data) {
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
var ctx = location.href.substring(0, location.href.lastIndexOf("/"));
var dataObject = JSON.stringify({ 'username': data });
$.ajax({
url: ctx+'/users/edit',
type: 'POST',
beforeSend: function(xhr){
xhr.setRequestHeader(header, token);
},
data: data
});
}
控制器:
@RequestMapping(value = "/users/edit", method = RequestMethod.POST)
public String editUser(@RequestParam("username") String username) {
System.out.println(username);
return "users/edit";
}
toLowerCase 函数在 jQuery 中
// Caches the header
setRequestHeader: function( name, value ) {
var lname = name.toLowerCase();
if ( !state ) {
name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
requestHeaders[ name ] = value;
}
return this;
},
【问题讨论】:
-
我在您发布的任何代码中都没有看到任何
toLowerCase的使用。错误发生在其他地方。 -
@Barmar 请看我的编辑
-
错误提示
header未定义。 -
我在我的页面顶部添加了这些,这已经解决了问题
<meta name="_csrf" content="${_csrf.token}"/><meta name="_csrf_header" content="${_csrf.headerName}"/> -
自然而然。您的代码将这些元标记的内容复制到 AJAX 标头中。没有标签当然不行。
标签: javascript jquery ajax spring-mvc spring-security