我正忙于一个只有一个页面的网站,只有登录后才能访问:home.jsp
。一旦用户使用有效会话登录,如果他按下浏览器上的后退按钮,那么他应该被重定向到login.jsp
如果他按下浏览器的前进按钮,则会再次出现。他应该无法到达home.jsp
所以在做了一些搜索之后,我已经实现了:
<%
response.setHeader ( "Cache-Control","no-cache,no-store,must-revalidate");
response.setHeader("Pragma","no-cache");
response.setDateHeader ( "Expires", 0)
%>
On the home.jsp
页面并按下前进按钮后,它说网页已过期,但我正在寻找的是我的自定义页面,例如sessionExpired.jsp
说重新登录...
请帮我解决这个问题。
实施重定向后获取 http://en.wikipedia.org/wiki/Post/Redirect/Get图案。因此,每次最终用户发送(成功)POST 请求时,都会发送一个redirect到目标页面而不是转发。这样,后退按钮将指向重定向的 GET 请求,而不是初始的 POST 请求。
例如。在你的doPost()
处理登录的方法:
User user = userService.find(username, password);
if (user != null) {
request.getSession().setAttribute("user", user);
response.sendRedirect(request.getContextPath() + "/home.jsp");
}
而在你的doPost()
处理注销的方法:
request.getSession().invalidate();
response.sendRedirect(request.getContextPath() + "/login.jsp");
不要忘记按照中的说明实现无缓存过滤器防止用户在注销后看到以前访问过的安全页面 https://stackoverflow.com/questions/4194207/prevent-user-from-seeing-previously-visited-secured-page-after-logout/4194251#4194251,否则浏览器可能仍会显示其缓存中之前访问过的安全页面。这是not通过以下方式在每个 JSP 中设置这些响应标头是正确的小脚本方式如代码片段中所示。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)