Использование фильтров на сервере Grizzly, на котором работает служба REST Джерси
Вопрос
Я пытаюсь использовать Grizzly для создания сервера для запуска службы REST, которую я разработал с использованием Jersey. Я создаю сервер Grizzly, используя:
final String baseUri = "http://localhost:9998/";
final Map<String, String> initParams = new HashMap<String, String>();
initParams.put("com.sun.jersey.config.property.packages", "me.my.rest.package");
SelectorThread threadSelector =
GrizzlyWebContainerFactory.create(baseUri, initParams);
Как видно из всех примеров, которые я нашел. Это нормально, сервер запускается и может пересылать входящие запросы моим классам ресурсов. Р>
Однако реализация сервиса требует использования фильтра сервлетов. Похоже, что Grizzly поддерживает определение фильтров и других подобных параметров конфигурации, связанных с сервлетами, через класс ServletAdapter
. Моя проблема в том, что я не могу понять, как определить фильтр при использовании com.sun.jersey.api.container.grizzly.GrizzlyWebContainerFactory
, который обеспечивает интеграцию с Джерси.
Есть идеи?
Решение
Думаю, у меня есть кое-что для тебя ...
GrizzlyWebServer ws = new GrizzlyWebServer(9999);
ServletAdapter jerseyServletAdapter = new ServletAdapter();
jerseyServletAdapter.setServletInstance(new ServletContainer());
jerseyServletAdapter.addInitParameter(
"com.sun.jersey.config.property.packages", "me.my.rest.package");
jerseyServletAdapter.setServletPath("/api");
// HERE IS HOW YOU ADD A FILTER
jerseyServletAdapter.addFilter(new MyFilter(), "HibernateSessionFilter", null);
ws.addGrizzlyAdapter(jerseyServletAdapter, null);
... это работает для меня, надеюсь, это поможет и вам.
Другие советы
Вы пробовали:
((ServletAdapter) threadSelector.getAdapter()).addFilter()