【发布时间】:2017-08-09 19:21:03
【问题描述】:
我有一个 tile-standard jsp,它包含在我的应用程序的所有页面中。我试图在应用程序的所有 Ajax 请求中注入一些安全令牌,为此我将以下 sn-p 写入此 JSP 的 head 元素。问题是,在大多数情况下,ajax 调用按预期被拦截,并且令牌被注入数据中。但在某些情况下,不会调用 beforesend 方法,因此请求中不存在令牌。我不知道为什么有些 Ajax 调用没有被截获,而另一些却被截获。 下面是代码 sn-p :
$(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);
}
}
});
});
【问题讨论】:
-
beforeSend间歇性失败的可能性很小。更有可能是请求中缺少某些数据,或者您在执行$.ajaxSetup之前进行了 AJAX 调用。 -
@RaviRanjan 虽然标题相同,但问题和解决方案似乎与这种情况无关。
-
@RoryMcCrossan - 我们如何在 $.ajaxsetup 之前进行 ajax 调用?
-
如果在调用
$.ajaxSetup之前调用了任何AJAX方法... -
是的,如果
$.ajax调用在另一个 domready 中,该 domready 定义在持有$.ajaxSetup之前。
标签: javascript jquery ajax security csrf-protection