Die Verwendung von Filtern mit Grizzly-Server einen Jersey REST-Dienst ausgeführt wird
Frage
Ich versuche, Grizzly zu verwenden, um einen Server erstellen einen REST-Dienst auszuführen, die ich entwickelt habe mit Jersey. Ich erstelle den Grizzly-Server mit:
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);
als alle Beispiele, die ich gefunden habe, scheinen darauf hinzudeuten. Das ist in Ordnung, der Server gestartet und in der Lage, eingehende Anfragen an meine Ressourcenklassen zu übermitteln.
Allerdings ist die Service-Implementierung erfordert es einen Servlet-Filter zu verwenden. Es scheint, dass Grizzly die Definition von Filtern und anderen ähnlichen Servlet-bezogenen Konfigurationsoptionen über die ServletAdapter
Klasse unterstützt. Mein Problem ist, dass ich nicht herausfinden kann, wie man einen Filter definieren, wenn eine com.sun.jersey.api.container.grizzly.GrizzlyWebContainerFactory
verwendet, die Jersey-Integration bietet.
Irgendwelche Ideen?
Lösung
Ich denke, dass ich etwas für Sie haben könnte ...
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);
... seine Arbeits für mich, ich hoffe, es hilft Ihnen auch.
Andere Tipps
Haben Sie versucht:
((ServletAdapter) threadSelector.getAdapter()).addFilter()