Uso de filtros con el servidor Grizzly que ejecuta un servicio REST de Jersey
Pregunta
Estoy tratando de usar Grizzly para crear un servidor para ejecutar un servicio REST que desarrollé con Jersey. Estoy creando el servidor 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);
como todos los ejemplos que he encontrado parecen sugerir. Esto está bien, el servidor se inicia y puede reenviar las solicitudes entrantes a mis clases de recursos.
Sin embargo, la implementación del servicio requiere que use un filtro de servlet. Parece que Grizzly admite la definición de filtros y otras opciones de configuración similares relacionadas con servlets, a través de la clase ServletAdapter
. Mi problema es que no puedo resolver cómo definir un filtro cuando uso un com.sun.jersey.api.container.grizzly.GrizzlyWebContainerFactory
que proporciona la integración de Jersey.
¿Alguna idea?
Solución
Creo que podría tener algo para ti ...
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);
... está funcionando para mí, espero que también te ayude.
Otros consejos
¿Has probado:
((ServletAdapter) threadSelector.getAdapter()).addFilter()