Utilizzo dei filtri con il server Grizzly che esegue un servizio REST Jersey
Domanda
Sto cercando di usare Grizzly per creare un server per eseguire un servizio REST che ho sviluppato usando Jersey. Sto creando il server Grizzly usando:
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);
come tutti gli esempi che ho trovato sembrano suggerire. Questo va bene, il server si avvia ed è in grado di inoltrare richieste in arrivo alle mie classi di risorse.
Tuttavia, l'implementazione del servizio richiede l'utilizzo di un filtro servlet. Sembra che Grizzly supporti la definizione di filtri e altre simili opzioni di configurazione relative al servlet, tramite la classe ServletAdapter
. Il mio problema è che non riesco a capire come definire un filtro quando uso un com.sun.jersey.api.container.grizzly.GrizzlyWebContainerFactory
che fornisce l'integrazione con Jersey.
Qualche idea?
Soluzione
Penso che potrei avere qualcosa per te ...
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);
... funziona per me, spero che possa aiutarti anche tu.
Altri suggerimenti
Hai provato:
((ServletAdapter) threadSelector.getAdapter()).addFilter()