javascript - Ajax beforesend 方法在某些情况下不起作用

标签 javascript jquery ajax security csrf-protection

我有一个tile-standard jsp,它包含在我的应用程序的所有页面中。我试图在应用程序的所有 Ajax 请求中注入(inject)一些安全 token ,为此我将以下代码片段写入此 JSP 的 head 元素中。问题是,在大多数情况下,ajax 调用会按预期被拦截,并将 token 注入(inject)到数据中。但在某些情况下,beforesend 方法不会被调用,因此请求中不存在 token 。我不确定为什么有些 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);
                       }
                }
            });             
        });

最佳答案

我发现了这个问题。非常感谢 Rory McCrossan 的投入,引导我走向正确的方向。因此,ajax 调用是在 ajaxsetup 之前发生的,因此我无法设置 token 。我使用了下面的代码片段,它不依赖于任何文档事件,只是位于页面上并在所有 ajax 调用上触发。

         $.ajaxPrefilter(function(options, originalOptions, jqXHR) {
           var controlId = "<c:out value='${ControlID}' />";
           if(controlId) {   
             var csrfData = {
                        ControlID : controlId                                       
                    }
             options.data + = "&" + $.param(csrfData);
             }
          });

关于javascript - Ajax beforesend 方法在某些情况下不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45585821/

相关文章:

javascript - 当日期来自不同时区时,在 IOS 中为 angularjs 项目返回无效日期

javascript - Hapi.js 子域路由到插件

jquery - 调用 jquery 验证对表单元素有效

jquery - 如何在鼠标悬停时更改 div 背景图像?

Javascript 混淆 AJAX 代码

javascript - 使用 ajax Jquery 和 asp.net 重定向具有值的页面

jquery - 如何在 jQuery 对话框中验证 ViewModel?

javascript - 引用对象数组中的对象标题

javascript - 排列/格式化 html 和 js 代码

jquery - 如何在网络浏览器上绘制箭头