Пользовательские фильтры Jetty в Dropwizard

Я пытаюсь добавить собственный фильтр заголовков в свой экземпляр Dropwizard, чтобы проверить, синхронизирована ли версия запроса с версией экземпляра Dropwizard.

Я вижу, вы можете использовать FilterBuilder, чтобы добавить причал CrossOriginFilters. Однако у меня возникли проблемы с выяснением того, как установить пользовательский фильтр.

Спасибо


person jbenowitz    schedule 03.10.2013    source источник


Ответы (2)


Через класс Environment.

https://dropwizard.github.io/dropwizard/manual/core.html#environments

@Override
public void run(MyApplicationConfiguration configuration, Environment environment) {
    environment.servlets().addFilter("Custom-Filter-Name", new MyCustomFilter()).addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
}

Вы можете выбрать типы отправки, изменив EnumSet.allOf(DispatcherType.class)

person dom farr    schedule 08.11.2013
comment
в новом dropizard 0.7+ это делается так: environment.servlets().addFilter(/*, new CrossOriginFilter()); - person Maksim; 03.04.2014
comment
@Максим. Это неправильно. Первым параметром addFilter в 0.7.x dropwizard является имя фильтра, а не сопоставление. Требуется вызов addMappingForUrlPatterns(EnumSet<DispatcherType> dispatcherTypes, boolean isMatchAfter,String... urlPatterns) - person dom farr; 08.04.2014

Вот как я заставил его работать с помощью Dropwwizard 0.7.1 (API, похоже, изменились по сравнению с другими примерами, которые я там нашел)

В методе запуска вашего приложения:

final FilterRegistration.Dynamic cors = environment.servlets().addFilter("crossOriginRequsts", CrossOriginFilter.class);
cors.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");

https://gist.github.com/craigbeck/fb71818063175b9b4210

person craigb    schedule 11.07.2014