问题描述
我们正在运行 Kibana 4.3 服务。我不想修改源代码。
目标是添加一个加密令牌,将其称为 A-Token 到浏览器向 Kibana 发出的每个 Ajax 请求。
背景
Kibana 服务由 nginx 代理。
当用户向 Kibana 服务发出 Ajax 请求时,该请求会被 nginx http_auth_request 代理拦截,并传递到验证令牌的“auth”服务。如果它丢失或无效,则“auth”将返回 201 到 http_auth_request 并执行对 Kibana 服务的请求,否则它返回 404 并且请求被拒绝,因为它是在没有有效令牌的情况下发出的。
(该方案基于加密令牌模式,通常用作在无会话情况下(例如当前情况)跨站点脚本编写的对策)。
我阅读了 W3 XMLHttpRequest 文档,似乎 setRequestHeader 需要在打开之后和发送之前运行 - 这意味着该方案在一般情况下是不可能的,或者非常依赖于 JS 平台。
使用 Jquery .ajaxSetup 进行的测试(如本例所示)确认无法独立设置标头:
$.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader(A-Token", 1314159);
}
});
寻找不需要分叉 Kibana 的可能解决方案。
Danny
我也在寻找这个问题的解决方案,但找不到任何东西,然后我想出了下一个解决方案:
XMLHttpRequest.prototype.origOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function () {
this.origOpen.apply(this, arguments);
this.setRequestHeader('X-TOKEN', 'the token');
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)