使用过滤器与Grizzly服务器运行Jersey REST服务

12

我正在尝试使用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时,我无法弄清楚如何定义过滤器。

有什么想法吗?


太神奇了,我正想问完全相同的问题。如果有所收获,请告诉我。我也会这样做。 - ra9r
2个回答

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

...它对我有效,希望它也对您有所帮助。


你如何将Servlet上下文添加到此方案中,以便您可以通过@Context注入HttpServletRequest等内容到您的资源对象中? - ae6rt

1

你尝试过了吗:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接