慕田峪7331174
你,你们可以也不应该禁用浏览器回退按钮或历史记录。这不利于用户体验。有JavaScript黑客,但它们不可靠,而且当客户端禁用JS时也不能工作。具体的问题是,请求的页面是从浏览器缓存加载的,而不是直接从服务器加载的。这在本质上是无害的,但对最终用户来说确实是令人困惑的,因为s/他错误地认为它真的来自服务器。你只需要指示浏览器不高速缓存全受限制的JSP页面(因此不仅仅是注销页面/操作本身!)。通过这种方式,浏览器被迫从服务器而不是从缓存中请求页面,因此将执行服务器上的所有登录检查。您可以使用滤光器设置必要响应头在doFilter()方法:@WebFilterpublic class NoCacheFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(req, res);
}
// ...}映射这个Filter在.上url-pattern例如,令人感兴趣的*.jsp.@WebFilter("*.jsp")或者,如果您只想将此限制放在受保护的页面上,那么您应该指定一个URL模式,该模式涵盖所有这些安全页面。例如,当它们都在文件夹中时/app,则需要指定/app/*.@WebFilter("/app/*")更重要的是,你也可以做同样的工作。Filter作为您检查登录用户是否存在的位置。不要忘记在测试前清除浏览器缓存!)另见:用于登录的身份验证筛选器和servlet如何控制所有浏览器的网页缓存?