在 dropwizard 0.7.0 中使用 CORS 标头过滤器

Posted

技术标签:

【中文标题】在 dropwizard 0.7.0 中使用 CORS 标头过滤器【英文标题】:Using CORS header filter with dropwizard 0.7.0 【发布时间】:2014-08-24 04:50:16 【问题描述】:

我正在尝试获取 dropwizard 0.7.0 (Jersey) REST 服务来发送 html CORS 标头,例如“Access-Control-Allow-Origin”。我找到了各种教程,还了解了如何在 0.7.0 和以前的版本中进行操作的区别。最有希望的方法似乎是described in the dropwizard group,但是当我使用给定的代码时,不会发送任何标题。过滤器似乎不起作用。当我使用自定义过滤器时,它正在被初始化但也没有被使用。到目前为止,日志中没有任何异常。

这是我(最新的)运行方法:

        @Override
public void run(BackendConfiguration configuration, Environment environment) throws Exception 

    // XXX why doesn't this work?
    FilterRegistration.Dynamic filter = environment.servlets().addFilter("CORS", CrossOriginFilter.class);
    filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
    filter.setInitParameter("allowedOrigins", "*"); // 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,HEAD");
    filter.setInitParameter("preflightMaxAge", "5184000"); // 2 months
    filter.setInitParameter("allowCredentials", "true");


    final DBIFactory factory = new DBIFactory();
    final DBI jdbi = factory.build(environment, configuration.getDataSourceFactory(), "h2");

    environment.jersey().register(new UserResource(jdbi));

是不是我做错了什么?

【问题讨论】:

【参考方案1】:

来自 CrossOriginFilter:

    String origin = request.getHeader(ORIGIN_HEADER);
    // Is it a cross origin request ?
    if (origin != null && isEnabled(request))

您必须在请求中发送 Origin 标头才能使过滤器正常工作。

【讨论】:

非常感谢!在reading up 再次讨论这个话题之后,我想我现在也理解了这个概念了:)

以上是关于在 dropwizard 0.7.0 中使用 CORS 标头过滤器的主要内容,如果未能解决你的问题,请参考以下文章

在dropwizard应用程序中读取自定义配置文件时出错

我们如何使用 jdbi 在 Dropwizard 中强制资源(控制器)级别的事务?

dropwizard 应用程序中的配置更改以与 react browserHistory 一起使用

dropwizard metrics - 基本使用介绍

使用dropwizard--加入swagger

在 Dropwizard 中将 http 连接重定向到 https 的首选方式