Dojo rpc.JsonService - 设置自定义 header

Dojo rpc.JsonService - set custom header

道场 v1.6.0。 有什么方法可以为 dojo.rpc.JsonService() 的所有实例的每个调用设置自定义 header(在我的例子中是 spring csrf 保护)?

或者至少对 dojo.rpc.JsonService() 的特定实例的每次调用?

问题出在 back-end Spring 4 csrf 保护中,它过滤所有请求中没有特定 header 和 returns HTTP 403 禁止状态的内容。

现在我的代码如下所示:

...
dojo.require("dojo.rpc.RpcService");
dojo.require("dojo.rpc.JsonService");
var myService = new dojo.rpc.JsonService("someMyService");
var result = myService.myRemoteMethod(param1, param2, ... );
...

例如 jQuery 处理每个 ajax 请求并设置 header 的代码如下所示:

var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
$(document).ajaxSend(function (e, xhr, options) {
    xhr.setRequestHeader(header, token);
});

如果能为道场制作这样的东西就完美了。

我还没有找到任何适用于 dojo 1.6 的解决方案,但发现我可以通过使用纯 javascript 处理每个 ajax 请求来解决此问题,如 here[=12 所述=]

所以我最终的解决方案是:

(function(send) {
    var token = $("meta[name='_csrf']").attr("content");
    var header = $("meta[name='_csrf_header']").attr("content");
    XMLHttpRequest.prototype.send = function(data) {
        if (isNotBlank(token) && isNotBlank(header)) {
            this.setRequestHeader(header, token);
        }
        send.call(this, data);
    };

})(XMLHttpRequest.prototype.send);