Использование фильтра заголовка CORS с dropwizard 0.7.0

#java #filter #jersey #cors #dropwizard

#java #Фильтр #джерси #cors #dropwizard

Вопрос:

Я пытаюсь получить REST-сервис dropwizard 0.7.0 (Джерси) для отправки заголовка HTML CORS типа «Access-Control-Allow-Origin». Я нашел различные руководства, а также узнал о разнице в том, как это сделать в 0.7.0 и предыдущей версии. Наиболее многообещающим кажется способ, описанный в группе dropwizard, но когда я использую данный код, заголовки вообще не отправляются. Фильтр, похоже, не работает. Когда я использую пользовательский фильтр, он инициализируется, но также не используется. Пока в журнале нет ничего необычного.

Это мой (последний) метод запуска:

         @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 amp;amp; isEnabled(request))
  

Вы должны отправить исходный заголовок в запросе, чтобы фильтр заработал.

Комментарии:

1. Большое спасибо! Прочитав еще раз по теме, я думаю, что теперь я также понимаю концепцию 🙂