【问题标题】:Prevent user from traversing back using browser back button in spring `Web application`防止用户在spring`Web应用程序`中使用浏览器后退按钮进行遍历
【发布时间】:2013-03-28 15:12:44
【问题描述】:

我正在使用 spring MVC 框架开发 Web 应用程序,我想限制用户在使用我的 Web 应用程序时使用浏览器的后退按钮进行遍历。我如何在springs 中这样做? spring 中是否有任何内置功能?

【问题讨论】:

    标签: spring-mvc browser back-button


    【解决方案1】:

    在您的应用程序中使用以下过滤器类,不要忘记在 web.xml 中注册此过滤器类。

    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletResponse;
    
    public class NoBrowserCacheFilter implements Filter{
    
        @Override
        public void destroy() {
    
        }
    
        @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");
            response.setHeader("Pragma", "no-cache");
            response.setDateHeader("Expires", -1);
            chain.doFilter(req, res);
        }
    
        @Override
        public void init(FilterConfig arg0) throws ServletException {
    
        }
    
    }
    

    就是这样,它解决了你的问题。

    【讨论】:

    • 我实现了这一点,但是当您单击后退按钮时,这仍然不会使表单过期。还有一个本地缓存。我仍然没有找到一个解决方案,一旦提交就会使表单过期,这样即使您单击返回,表单也应该是空的,不会以任何方式缓存。有什么解决办法吗?这将避免主要的双重(甚至更多)提交。
    【解决方案2】:

    您可以使用这个简单的代码,这将是一个错误的返回。 它将重新加载当前页面并打算禁用浏览器上的后退按钮。 this 在您想要阻止的预期 jsp 中。

    <script type="text/javascript">
        window.history.forward();
        function noBack() {
            window.history.forward();
        }
    </script>
    

    并将其添加到正文标记中:

    body onload="noBack();" onpageshow="if (event.persisted) noBack();" onunload=""
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 2011-11-13
      • 2015-10-22
      • 2011-10-15
      • 2017-06-10
      • 2020-05-02
      相关资源
      最近更新 更多