使用 qooxdoo 验证跨源 XHR

Authenticated cross-origin XHR with qooxdoo

qooxdoo 的 qx.data.store.Json,当用于跨源请求时,不会发送任何 cookie 或身份验证数据。

这个要求并不像看起来那么罕见。想象一下典型的开发人员设置:localhost:8080 上的 JavaEE 后端 运行,以及由 "source-server" 生成器任务或 IDE 的内置 Web 服务器提供服务的 qooxdoo 应用程序,比方说, localhost:8181.

身份验证成功后,将为本地主机设置一个 JSESSIONID cookie。要使 XHR (localhost:8181 -> localhost:8080) 成功,此 cookie 应与请求一起发送。

很明显,由于 qx.bom.request.Xhr 中缺少对 withCredentials 属性 的支持,因此未发送 cookie,也许需要单独的 RFE。我正在寻找的是快速而肮脏的解决方法,以加快开发过程 运行。最好的方法是什么?不给框架代码打补丁能做到吗?

无需弄脏 ;-) qx.data.store.Json accepts delegate, qx.data.store.IStoreDelegate 的构造函数,它具有 configureRequest 方法。

var delegate = {'configureRequest': function(request)
{
  // request is `qx.io.request.Xhr`
  // request.getTransport() is `qx.bom.request.Xhr`
  var nativeXhr = request.getTransport().getRequest();
  nativeXhr.withCredentials = true;
}};
var store = new qx.data.store.Json('http://localhost/your.json', delegate);

此外,qx.data.store.Json只是135 SLOC。编写自己的商店应该不难。