2017-04-11 149 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);