Как зарегистрировать GuiceFilter программно?

Я пробую трикотажное приложение с инъекцией зависимостей guice. Все работает нормально, когда я загружаю GuiceFilter через web.xml. Но когда я регистрирую фильтр с помощью guice api, как указано ниже, майка не инициализируется.

protected void configureServlets() {
    final Map<String, String> params = new HashMap<String, String>();
    params.put(PackagesResourceConfig.PROPERTY_PACKAGES, "com.mypackage.rest");
    bind(MyInterface.class).to(MyImpl.class);
    filter("/*").through(GuiceFilter.class);
    serve("/*").with(GuiceContainer.class, params);
}

person hanish.kh    schedule 17.01.2014    source источник


Ответы (1)


Вам не нужно регистрировать фильтр Guice внутри фильтра Guice. Он должен быть зарегистрирован непосредственно в вашем контейнере сервлета, в web.xml или в коде, который создает ваш контейнер сервлета (например, встроенный Jetty). С другой стороны, другие сервлеты и фильтры могут быть зарегистрированы в фильтре Guice.

Если вы не зарегистрируете фильтр Guice в своем контейнере сервлетов, как он узнает, что вы хотите передавать свои запросы через этот фильтр?

person Vladimir Matveev    schedule 17.01.2014
comment
Итак, что вы предлагаете, если я хочу загрузить GuiceFilter без использования web.xml? Я попытался создать фильтр, который расширяет GuiceFilter, и использовал аннотацию @WebFilter, чтобы загрузить его в качестве фильтра. Это работает нормально. Это хороший подход? - person hanish.kh; 20.01.2014
comment
К сожалению, я не знаю. Я еще не использовал аннотации JEE. Однако каким бы способом вы ни настроили фильтр, писать filter("/*").through(GuiceFilter.class) не совсем правильно, если только вы действительно не хотите запускать фильтр Guice внутри фильтра Guice. - person Vladimir Matveev; 20.01.2014