2

我正在使用我在谷歌云 (GCE) 上托管的 Dropwizard 以及网站。这意味着当前有 2 个位置处于活动状态:

Some.IP.Address - UI Some.IP.Address:8080 - Dropwizard 服务器

当 UI 尝试从我的 dropwizard 服务器调用任何内容时,我会收到跨站点源错误,这是可以理解的。但是,这对我来说是个问题。我该如何解决?如果我能以某种方式欺骗地址,这样我就不必在 UI 中完全限定资源,那就太好了。

我要做的是:

$.get('/provider/upload/display_information')

或者,如果我必须完全符合条件

$.get(' http://Some.IP.Address:8080/provider/upload/display_information ')

我尝试根据这个 google 组线程( https://groups.google.com/forum/#!topic/dropwizard-user/ybDOTOxjlLI )在 Dropwizard 中设置 Origin Filters ,但它似乎不起作用。

4

1 回答 1

2

http://Some.IP.Address服务器提供的 index.html 中,您可能有一个如下所示的 jQuery 脚本。

$.get('http://Some.IP.Address:8080/provider/upload/display_information', data, callback);

当然,由于同源策略 (SOP),您的浏览器将不允许访问http://Some.IP.Address:8080 。协议(http、https)和主机以及端口必须相同。

在 Dropwizard 上实现跨域资源共享 (CORS),您必须在 servlet 环境中添加一个 CrossOriginFilter。此过滤器将为服务器发送的每个响应添加一些 Access-Control-Headers。在 Dropwizard 应用程序的 run 方法中写入:

import org.eclipse.jetty.servlets.CrossOriginFilter;

public class SomeApplication extends Application<SomeConfiguration> {

    @Override
    public void run(TodoConfiguration config, Environment environment) throws Exception {
        FilterRegistration.Dynamic filter = environment.servlets().addFilter("CORS", CrossOriginFilter.class);
        filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
        filter.setInitParameter("allowedOrigins", "http://Some.IP.Address");    // allowed origins comma separated
        filter.setInitParameter("allowedHeaders", "Content-Type,Authorization,X-Requested-With,Content-Length,Accept,Origin");
        filter.setInitParameter("allowedMethods", "GET,PUT,POST,DELETE,OPTIONS");
        filter.setInitParameter("preflightMaxAge", "5184000"); // 2 months
        filter.setInitParameter("allowCredentials", "true");

        // ...
    }

    // ...

}

此解决方案适用于 Dropwizard 0.7.0,可在https://groups.google.com/d/msg/dropwizard-user/xl5dc_i8V24/gbspHyl4y5QJ上找到。

此过滤器将为每个响应添加一些 Access-Control-Headers。查看http://www.eclipse.org/jetty/documentation/current/cross-origin-filter.html了解 CrossOriginFilter 初始化参数的详细说明。

于 2014-04-16T16:20:45.733 回答