2009-09-17 95 views
12

我正在尝试使用Grizzly创建服务器来运行我使用Jersey开发的REST服务。我正在创建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来定义过滤器。

任何想法?

+0

最好的,我只是要问完全相同的问题。让我知道如果学到什么。我也会这样做。 – ra9r 2009-09-24 07:48:02

回答

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

谢谢!这正是我需要的。 – Andy 2009-09-24 11:44:22

+0

如何添加一个servlet上下文到这个方案,以便你可以通过@Context注入像HttpServletRequest这样的东西到你的资源对象中? – ae6rt 2013-03-15 20:10:40

1

您是否尝试过:

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