Sus dos formas.
"Envoltura" del original HttpSession
en su propia implementación HttpServletRequestWrapper
.
Hice esto hace poco tiempo para la agrupación de sesiones distribuidas con Hazelcast y Spring Session.
Here se explica bastante bien.
En primer lugar, poner en práctica su propio HttpServletRequestWrapper
public class SessionRepositoryRequestWrapper extends HttpServletRequestWrapper {
public SessionRepositoryRequestWrapper(HttpServletRequest original) {
super(original);
}
public HttpSession getSession() {
return getSession(true);
}
public HttpSession getSession(boolean createNew) {
// create an HttpSession implementation from Spring Session
}
// ... other methods delegate to the original HttpServletRequest ...
}
Después, a partir de su propio filtro, envuelve el original HttpSession
, y ponerlo dentro de la FilterChain
recibida por su contenedor servlet.
public class SessionRepositoryFilter implements Filter {
public doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
HttpServletRequest httpRequest = (HttpServletRequest) request;
SessionRepositoryRequestWrapper customRequest =
new SessionRepositoryRequestWrapper(httpRequest);
chain.doFilter(customRequest, response, chain);
}
// ...
}
Por último, establecer su filtro al principio en el web.xml para asegurar que funcione antes que cualquier otro.
La segunda manera de lograrlo es proporcionando a su Servlet Container su SessionManager personalizado.
Por ejemplo, en Tomcat 7.
AFAIK, esto no es posible. La especificación JEE no exige que la implementación de HttpSession sea reemplazable. Pero la pregunta principal es: ¿por qué quieres hacer esto? –
no estoy seguro de si necesita saber cómo implementarlo, pero consulte este http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tutorial-Session-Tracking.html – eon
¿Qué es exactamente lo que necesita hacer y cree que necesita implementar HttpSession? – CrackerJack9