Использование фильтров на сервере Grizzly, на котором работает служба REST Джерси - PullRequest
12 голосов
/ 17 сентября 2009

Я пытаюсь использовать Grizzly для создания сервера для запуска службы REST, которую я разработал с использованием Джерси. Я создаю сервер 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, который обеспечивает интеграцию в Джерси.

Есть идеи?

Ответы [ 2 ]

8 голосов
/ 24 сентября 2009

Я думаю, у меня есть кое-что для тебя ...

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);

... это работает для меня, я надеюсь, что это поможет и вам.

1 голос
/ 17 ноября 2010

Вы пробовали:

((ServletAdapter) threadSelector.getAdapter()).addFilter()
...