quisiera eliminar la HttpSession completamente
No se puede desactivar en su totalidad. Todo lo que tiene que hacer es simplemente no para obtener un identificador de request.getSession()
o request.getSession(true)
en cualquier parte del código de su aplicación web y asegurarse de que sus JSP no lo hagan implícitamente configurando <%@page session="false"%>
.
Si su principal preocupación es realmente deshabilitar la cookie que se utiliza detrás de las escenas de HttpSession
, entonces en Java EE 5/Servlet 2.5 solo puede hacerlo en la configuración de aplicación de aplicaciones específica del servidor. En, por ejemplo, Tomcat, puede establecer el atributo cookies
en false
en el elemento <Context>
.
<Context cookies="false">
Ver también este Tomcat specific documentation.De esta forma, la sesión no se retendrá en las solicitudes subsiguientes que no se reescriban en la URL, solo cada vez que la solicite por algún motivo. Después de todo, si no lo necesita, solo no lo agarre, entonces no será creado/retenido en absoluto.
O, si ya se encuentra en Java EE 6/Servlet 3.0 o posterior, y realmente quiere hacerlo a través de web.xml
, a continuación, se puede utilizar el nuevo elemento <cookie-config>
en web.xml
de la siguiente manera a cero el máximo de edad:
<session-config>
<session-timeout>1</session-timeout>
<cookie-config>
<max-age>0</max-age>
</cookie-config>
</session-config>
Si desea codificar en su aplicación web para que getSession()
nunca se devuelve un HttpSession
(o un "vacío" HttpSession
), entonces usted tendrá que crear un filtro que escucha en un url-pattern
de /*
que sustituye al HttpServletRequest
con una implementación de HttpServletRequestWrapper
que devuelve todos los getSession()
métodos null
, o una implementación simulada personalizada HttpSession
que no hace nada, o incluso arroja UnsupportedOperationException
.
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
chain.doFilter(new HttpServletRequestWrapper((HttpServletRequest) request) {
@Override
public HttpSession getSession() {
return null;
}
@Override
public HttpSession getSession(boolean create) {
return null;
}
}, response);
}
P. S. ¿Es una mala idea? Prefiero deshabilitar completamente las cosas hasta que realmente las necesite.
Si no los necesita, simplemente no los use. Eso es todo. Realmente :)
¡Qué pregunta tan interesante! Tengo una situación en la que con Tomcat, no se está creando ninguna sesión para mí, así que estaba buscando si había una manera de activar la sesión _on_ en web.xml. : D – Trejkaz