在运行Jersey REST服务的Grizzly服务器上使用过滤器

时间:2009-09-17 15:14:06

标签: servlets jersey grizzly

我正在尝试使用Grizzly创建一个服务器来运行我使用Jersey开发的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);

正如我发现的所有例子似乎都暗示的那样。这很好,服务器启动并能够将传入的请求转发到我的资源类。

但是,服务实现要求它使用servlet过滤器。似乎Grizzly通过ServletAdapter类支持过滤器的定义和其他类似的servlet相关配置选项。我的问题是,当使用提供Jersey集成的com.sun.jersey.api.container.grizzly.GrizzlyWebContainerFactory时,我无法弄清楚如何定义过滤器。

有什么想法吗?

2 个答案:

答案 0 :(得分:8)

我想我可能会为你找些东西......

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 :(得分:1)

你试过了吗?

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