我有一个标准的jsp,它包含在我的应用程序的所有页面中。我试图在应用程序的所有Ajax请求中注入一些安全性令牌,为此我将下面的代码片段写入此JSP的head元素中。问题是,在大多数情况下,ajax调用会按预期被截获,并且令牌会被注入数据中。但在某些情况下,未调用beforesend方法,因此请求中不存在令牌。我不确定为什么有些Ajax调用没有被拦截而其他调用被拦截。 以下是代码段:
$(document).ready(function() {
$.ajaxSetup({
beforeSend: function(xhr, settings) {
var controlId = "<c:out value='${XXXControlIDXXX}' />";
// Injecting CSRF token id into data
if(controlId!=null) {
var csrfData = {
XXXControlIDXXX : controlId
}
settings.data += "&" + $.param(csrfData);
}
}
});
});
答案 0 :(得分:0)
我发现了这个问题。非常感谢Rory McCrossan的投入,这使我走向了正确的方向。所以,ajax调用是在ajaxsetup之前发生的,因此我无法设置令牌。我使用下面的代码片段,它不依赖于任何文档事件,只是坐在页面上并在所有ajax调用上被触发。
$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
var controlId = "<c:out value='${ControlID}' />";
if(controlId) {
var csrfData = {
ControlID : controlId
}
options.data + = "&" + $.param(csrfData);
}
});