防止用户在注销后查看先前访问过的安全页。

防止用户在注销后查看先前访问过的安全页。

我有这样的要求,即最终用户在注销/退出后不应该返回到受限的页面。但目前,最终用户可以通过浏览器返回按钮、访问浏览器历史记录,甚至通过在浏览器地址栏中重新输入URL来实现这一点。

基本上,我希望最终用户不应该能够以任何方式访问受限制的页面后,签署。我怎样才能做到最好呢?我可以用JavaScript禁用后退按钮吗?


德玛西亚99
浏览 553回答 4
4回答

慕田峪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如何控制所有浏览器的网页缓存?

一只斗牛犬

如果您转发一个页面,URL模式中的.jsp将无法工作。尝试也包括您的servlet.。这将使您的应用程序不受此后退按钮问题的影响。

呼如林

您可以试着告诉浏览器不要缓存主页(使用适当的头-ExchangeCache-Control,Pragma)。但这并不一定能奏效。您可以做的是在页面加载时对服务器进行Ajax调用,以检查用户是否已被记录,如果没有-重定向。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript