为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

德玛西亚99 2019-05-31 16:53:40
防止用户在注销后查看先前访问过的安全页。我有这样的要求,即最终用户在注销/退出后不应该返回到受限的页面。但目前,最终用户可以通过浏览器返回按钮、访问浏览器历史记录,甚至通过在浏览器地址栏中重新输入URL来实现这一点。基本上,我希望最终用户不应该能够以任何方式访问受限制的页面后,签署。我怎样才能做到最好呢?我可以用JavaScript禁用后退按钮吗?
查看完整描述

4 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

你,你们可以也不应该禁用浏览器回退按钮或历史记录。这不利于用户体验。有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作为您检查登录用户是否存在的位置。

不要忘记在测试前清除浏览器缓存!)

另见:


查看完整回答
反对 回复 2019-05-31
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

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


查看完整回答
反对 回复 2019-05-31
?
呼如林

TA贡献1798条经验 获得超3个赞

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


查看完整回答
反对 回复 2019-05-31
  • 4 回答
  • 0 关注
  • 552 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号