【问题标题】:How to make GWT work with CORS and cookies如何使 GWT 与 CORS 和 cookie 一起工作
【发布时间】:2013-02-11 08:25:33
【问题描述】:

我分离了 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 中做到这一点?

【问题讨论】:

    标签: gwt cookies csrf cors


    【解决方案1】:

    默认情况下,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 中。因此,如果您正在使用此版本,请在创建构建器时调用此方法。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 2015-07-02
    • 1970-01-01
    • 2020-11-05
    • 2020-02-16
    相关资源
    最近更新 更多