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);
道场 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);