Estoy desarrollando una aplicación web java utilizando servlet, para evitar que el usuario presione el botón Atrás para ver información de usuarios anteriores, tengo el siguiente código:Cómo evitar que un usuario vea información de usuarios anteriores al presionar el botón "Atrás"
protected void processRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException
{
HttpSession session=request.getSession(true);
response.setContentType("text/html");
response.setHeader("Cache-Control","no-cache,no-store");
response.setDateHeader("Expires",0);
response.setHeader("Pragma","no-cache");
......
// if (!User_Logged_In)
session.invalidate();
}
además también tengo el siguiente código en el archivo: web/wEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
......
<filter>
<filter-name>ResponseHeaderFilter</filter-name>
<filter-class>ResponseHeaderFilter</filter-class>
<init-param>
<param-name>Cache-Control</param-name>
<param-value>private,no-cache,no-store</param-value>
</init-param>
<init-param>
<param-name>Pragma</param-name>
<param-value>no-cache</param-value>
</init-param>
<init-param>
<param-name>Expires</param-name>
<param-value>0</param-value>
</init-param>
</filter>
</web-app>
Y el ResponseHeaderFilter.java se ve así:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class ResponseHeaderFilter implements Filter
{
FilterConfig fc;
public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,ServletException
{
HttpServletResponse response=(HttpServletResponse)res;
for (Enumeration e=fc.getInitParameterNames();e.hasMoreElements();) // Set the provided HTTP response parameters
{
String headerName=(String)e.nextElement();
response.addHeader(headerName,fc.getInitParameter(headerName));
}
chain.doFilter(req,response); // Pass the request/response on
}
public void init(FilterConfig filterConfig)
{
this.fc=filterConfig;
}
public void destroy()
{
this.fc=null;
}
}
Hasta el momento todavía no está funcionando correctamente. El botón Atrás abrirá una ventana de advertencia que indica que los datos han expirado, pregunta si el usuario desea reenviarlo. Si elige sí, seguirá mostrando la información de las páginas anteriores. ¿Qué estoy haciendo mal? ¿Cuál es la solución?
Frank
Sí, estoy desarrollando una aplicación web de un PC en un lugar público, si el usuario B golpea el botón de retroceso que podría ver información privada del usuario A.
Estaba tratando de usar la identificación de sesión con servlet, pero ¿cómo hacerlo? ¿Algún código de muestra?
También probé el siguiente:
<Html>
<Head>...</Head>
<Body onLoad=document.execCommand("ClearAuthenticationCache","false")>
......
<script type="text/javascript">
// Clear current credentials : Requires IE6 SP1 or later
// document.execCommand("ClearAuthenticationCache");
document.execCommand("ClearAuthenticationCache","false");
</script>
......
</Html>
Funciona para IE pero pero Firefox.
Rompiendo el botón de retroceso sólo es relevante en una sola sesión. Por ejemplo, no puedo abrir una nueva ventana del navegador y presionar el botón "Atrás" para ir al último sitio web que visité. – sep332