2009-05-18 31 views
46

Tengo un requisito de tener que ejecutar varios servidores tomcat en una única caja física. Al acceder a estos desde un navegador, cuando el usuario cambia entre las aplicaciones, se produce el cierre de sesión del usuario con acceso anterior a la aplicación. Esto se debe al conflicto de cookies de JSESSIONID.Cambio de nombre JSESSIONID de cookie

Una posible solución es ejecutar cada aplicación en un contexto diferente. Lamentablemente, mis aplicaciones no funcionarán en la configuración de la ruta de contexto ya que no se accede a ninguno de los recursos con request.getContextPath() al principio.

Esto me deja cambiar el nombre de la cookie JSESSIONID para resolver el conflicto. ¿Hay alguna forma de hacer esto? Si es así, ¿cómo?

Espero tener clara mi pregunta.

Nota: Todas las aplicaciones se ejecutan en diferentes puertos en la misma máquina.

+3

¿Cómo se las arregla para ejecutar "servidor Tomcat múltiple" en los mismos puertos entre sí al mismo tiempo? –

+2

@HarryLime: puede suceder con un servidor proxy. – Thilo

Respuesta

4

No creo que sea posible en este momento - ver https://issues.apache.org/bugzilla/show_bug.cgi?id=42419

La última entrada dice "Esto se ha corregido en 5.5.x y se encontrará también en 5.5.28 en adelante" - que es el siguiente punto release - 5.5.27 es la versión actual.

+0

Gracias por descubrir esto. Parece que la única opción que me queda es modificar la fuente de tomcat existente. El informe de error/función indica claramente mi requisito y solución exactos. Gracias por la respuesta. – ramanr

2

No está 100% seguro de que esto funcionará, pero puede usar el atributo jvmRoute, que generalmente se usa en un entorno agrupado de carga/agrupado para que los equilibradores de carga puedan separar los nodos. Ejemplo:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1"> 

Esto va a terminar la generación de un valor JSESSIONID que se parece a "ABCDEF123456.node1".

Documentation link.

+0

Esto sobre el valor de la cookie, no su nombre, ¿verdad? –

13

Al usar las siguientes dos propiedades del sistema, esto se puede lograr con facilidad.

  • org.apache.catalina.SESSION_COOKIE_NAME
  • org.apache.catalina.SESSION_PARAMETER_NAME

Cualquier valor se puede pasar a propiedades anteriores para cambiar los valores por defecto.

Aquí se encuentra complete details con algunos ejemplos de script.

+1

Esto ya no funciona para Tomcat7 +. Ahora puede configurarlo en la configuración Contexto, vea la respuesta de @ timkingman. – Thilo

+0

Hice esto en tomcat 6, pero aún estoy recibiendo el mismo problema –

+0

¿qué pasa con embarcadero? – gstackoverflow

12

las siguientes obras para mí en Tomcat7 en el archivo context.xml:

<Context path="/yourApp" sessionCookieName="custom_session_id"> 
45

Todo es mucho más sencillo con Servlet API 3.0.

Ahora se puede configurar en su web.xml:

<session-config> 
    <cookie-config> 
     <name>MY_JSESSIONID_YAHOOOOOO</name> 
    </cookie-config> 
</session-config> 

eso es todo!

+0

la mejor respuesta! – x4k3p

Cuestiones relacionadas