Я разрабатываю веб-приложение java с помощью сервлета, чтобы пользователь не ударил кнопку «Назад», чтобы увидеть информацию предыдущих пользователей. У меня есть следующий код:Как запретить пользователю просматривать информацию предыдущих пользователей, нажав кнопку «Назад»
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();
}
Кроме того, у меня есть следующий код в файле: веб/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>
И ResponseHeaderFilter.java выглядит следующим образом:
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;
}
}
Пока он все еще работает неправильно. Кнопка «Назад» выведет окно с предупреждением о том, что данные истекли, и спрашивает, хочет ли пользователь перепроверить его. Если вы выберете «Да», он все равно отобразит информацию о предыдущих страницах. Что я делаю не так? В чем проблема?
Frank
Да, я занимаюсь разработкой веб-приложением для ПК в общественном месте, если пользователь B нажимает кнопку назад он мог видеть собственную информацию пользователя А.
Я пытался использовать идентификатор сеанса с сервлетом, но как это сделать, любой пример кода?
Я также попытался следующие:
<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>
Он работает для IE, но, но Firefox.
Разорвать кнопку назад имеет значение только в пределах одной сессии. Например, я не могу открыть новое окно браузера и нажать кнопку «назад», чтобы перейти на последний веб-сайт, который я посетил. – sep332 2008-10-31 13:20:01