#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. Большое спасибо! Прочитав еще раз по теме, я думаю, что теперь я также понимаю концепцию 🙂