【问题标题】:Dojo rpc.JsonService - set custom headerDojo rpc.JsonService - 设置自定义标头
【发布时间】:2017-09-06 22:20:28
【问题描述】:

道场 v1.6.0。 有没有办法为 dojo.rpc.JsonService() 的所有实例的每个调用设置自定义标头(在我的情况下为 spring csrf 保护)?

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

问题在于后端 Spring 4 csrf 保护,它过滤请求中没有特定标头的所有内容并返回 HTTP 403 Forbidden 状态。

目前我的代码如下所示:

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

例如,处理每个 ajax 请求并为其设置标头的 jQuery 代码如下所示:

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

为道场制作这样的东西是完美的。

【问题讨论】:

    标签: javascript spring dojo


    【解决方案1】:

    我还没有找到 dojo 1.6 的任何解决方案,但发现我可以通过使用纯 javascript 处理每个 ajax 请求来解决这个问题,如 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-07
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 2012-01-18
      相关资源
      最近更新 更多