Compartir datos de sesión entre contextos en Tomcat

He estado buscando soluciones para compartir datos de sesión entre varios archivos war. Encontré la siguiente solución http://www.fwd.at/tomcat/sharing-session-data-howto.html

La idea básica es que si tiene más de un archivo war, puede establecer una cookie utilizando el ID de sesión del primer contexto que se utiliza.

La cookie se puede establecer usando una ruta que se aplicará a todos los contextos / aplicaciones.

Por ejemplo, si tengo la siguiente configuración para 3 applicatons

/myapp/app1 /myapp/app2 /myapp/app3 

Puedo configurar una cookie de la siguiente manera

/ miapp sessionid.

La cookie sessionid se enviará a cualquier solicitud con / myapp en la dirección. Esto permite que la ID de sesión sea utilizada por cualquiera de los contextos.

El único problema con este enfoque es que fue escrito en 2003 y probado en Tomcat 4.

¿Cuáles son sus opiniones sobre este enfoque? ¿Hay una mejor manera de hacerlo?

Gracias

Ese artículo está muy desactualizado.

En Tomcat 5.5 y 6.0 puede establecer el atributo emptySessionPath en true en el elemento en /conf/server.xml .

  

En Tomcat 7.0, esto ha cambiado porque ahora se puede configurar desde la API de Servlet 3.0. Es entonces configurable en el lado de Tomcat configurando sessionCookiePath en / en el elemento en cualquier archivo context.xml responsable.

  

Como se dijo, hay una nueva API de Servlet 3.0 que le permite configurar la cookie de sesión a través de la API estándar. Puede hacerlo declarativamente agregando lo siguiente a web.xml :

   /   

o programáticamente por SessionCookieConfig que está disponible por ServletContext#getSessionCookieConfig() .

 getServletContext().getSessionCookieConfig().setPath("/"); 

Puede hacer esto en ServletContextListener#contextInitialized() o HttpServlet#init() .

Ver también:

  • Documentación del conector HTTP Tomcat 5.5
  • La documentación del conector HTTP Tomcat 6.0 – menciona un potencial agujero de seguridad
  • Documentación de contexto de Tomcat 7.0

Que yo sepa, no hay una forma directa de hacerlo, sin embargo, puede utilizar una cookie de nivel de dominio si estos contextos comparten el mismo dominio.

Puede poner los datos en la cookie (no lo recomiendo).

O bien, ingrese una Id. De sesión segura que puede usar para acceder a alguna forma de almacenamiento (DB o caché distribuida, etc.) para recuperar los datos que necesita.

Si la cantidad de datos no es astronómica y los datos en sí no cambian demasiado rápido, es posible que desee considerar el uso de JNDI. Esta solución fue diseñada exactamente para lo que estás buscando.

Puede consultar la documentación oficial o esta publicación en la lista de correo de Tomcat para obtener referencias y ejemplos.