2017-04-11 141 views
0

Dojo v1.6.0。 是否有任何方法来设置自定义标题(在我的情况下,春季csrf保护)到每个调用dojo.rpc.JsonService()的所有实例?Dojo rpc.JsonService - 设置自定义标头

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

问题在于后端Spring 4 csrf保护,它在请求中过滤没有特定标头的所有内容并返回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请求,并设置标题,它看起来像:

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); 
}); 

这将是完美的做出点就像道场的那样。

回答

0

我还没有找到道场1.6的任何解决方案,但发现我可以解决这个问题,处理每一个Ajax请求用纯JavaScript作为解释here

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

(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);