Necesito escribir una clase Servlet o Filter que pueda obtener acceso al objeto org.apache.catalina.connector.Request, que está envuelto en el objeto RequestFacade dado a mi servlet. La conversión no funciona, ya que RequestFacade no es una subclase de solicitud.¿Cómo obtengo el objeto org.apache.catalina.connector.Request en Tomcat?
La razón por la que necesito esto es porque estoy tratando de llamar al método setRequestedSessionId() de Request, y aparentemente esto no forma parte de la especificación del servlet de Http. La razón por la que necesito hacer esto es porque el ID de la sesión se está incluyendo en una URL con un nombre diferente al de JSESSIONID. No puedo cambiar la URL o el nombre del parámetro, por lo que intento asociar la solicitud con la sesión correcta extrayendo la ID de sesión y llamando a Request.setRequestedSessionId().
Realmente he resuelto el problema usando una subclase Valve, pero no me gusta usar una válvula porque, por lo que puedo ver, necesito instalar mi subclase Valve en el directorio Tomcat/server/classes en lugar de empaquetar con el resto de mi aplicación web. Si hubiera una forma portátil de hacerlo a través de diferentes contenedores Servlet, sería genial, pero por el momento me resigno a hacer este Tomcat específico.
Este es el código de la válvula de trabajo:
public class SessionSetter extends ValveBase {
public void invoke(Request request, Response response) throws IOException, ServletException {
String sessionId = request.getParameter("whatever");
request.setRequestedSessionId(sessionId);
}
}
¿Hay alguna manera de hacer lo mismo en un servlet o filtro? ¿O hay alguna forma de empaquetar la clase Valve en mi archivo .war de la aplicación?
¿Por qué necesita que ? – Bozho
¿Por qué tengo que hacer qué? Pensé que había indicado los motivos en el segundo párrafo, por favor díganme qué parte no explicaba bien. –
Si está utilizando Tomcat 6, esta podría ser una alternativa que podría consultar: http://tomcat.apache.org/tomcat-6.0-doc/config/systemprops.html#Sessions. Puede cambiar los nombres utilizados para el parámetro id de sesión utilizando las propiedades del sistema. Sin embargo, no está disponible para Tomcat 7 por lo que puedo decir (creo que la especificación de servlet que tc7 implementa es más estricta para cambiar el nombre). – matt