如何使GWT与CORS和cookie一起工作

时间:2013-02-26 01:27:23

标签: gwt cookies csrf cors

我将GWT分开 - 静态代码在CDN上,动态在不同的服务器上。 我在Tomcat7上配置了这个CORS过滤器,它工作正常:

http://software.dzhuvinov.com/cors-filter-installation.html

但是我仍然在努力让Cookie与GWT和CORS一起工作。

我主要需要它来保护XSRF(以及其他一些东西):

https://developers.google.com/web-toolkit/doc/latest/DevGuideSecurityRpcXsrf

看起来我必须在XMLHttpRequest中设置withcredentials = true。

有没有人知道如何在GWT中做到这一点?

1 个答案:

答案 0 :(得分:0)

默认情况下,Cookie不会与CORS一起发送。如果需要,您必须将withCredentials属性设置为GWT使用的低级XMLHttpRequest。不幸的是,没有办法从你的java代码中设置它。

一个简单的黑客是你在源代码树中维护自己的XMLHttpRequest.java版本(使用相同的命名空间),并以这种方式修改create()方法:

private static native XMLHttpRequest create(String responseType) /*-{
  [...]
  xhr.withCredentials = true;
  return xhr;
}-*/;

注意:从服务器端,您也必须发送此标头:

Access-Control-Allow-Credentials: true

否则,在GWT中处理身份验证的常规方法是使用带有身份验证信息的特殊标头并在服务器端读取它。

builder.setHeader("X-My-Authenticated-Header", "whatever");

编辑:正如t.broyer在下面的评论中指出的那样,RequestBuilder.setIncludeCredentials方法在2.5.1-rc1中。因此,如果您使用此版本,请在创建构建器时调用此方法。