Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 注销后如何保护我的帐户?_Jsp_Jakarta Ee_Servlet Filters_Logout_Back Button Control - Fatal编程技术网

Jsp 注销后如何保护我的帐户?

Jsp 注销后如何保护我的帐户?,jsp,jakarta-ee,servlet-filters,logout,back-button-control,Jsp,Jakarta Ee,Servlet Filters,Logout,Back Button Control,我有一种情况——当我从一个页面上注销后,如果有人在浏览器中单击“返回”按钮,它会自动再次进入返回页面。在Logout.java(Servlet)中,我使用: 一切正常。但在注销后,若我在浏览器中单击“返回”按钮(左上角),它将返回我所在的位置。我想这样做,如果我点击返回,那么必须说你的会话已被导出或登录或其他东西。怎么做。请给出您的宝贵建议。 我刚刚读到这篇文章&我创建了一个servlet FilterURL.java: public class FilterURL extends HttpSe

我有一种情况——当我从一个页面上注销后,如果有人在浏览器中单击“返回”按钮,它会自动再次进入返回页面。在Logout.java(Servlet)中,我使用:

一切正常。但在注销后,若我在浏览器中单击“返回”按钮(左上角),它将返回我所在的位置。我想这样做,如果我点击返回,那么必须说你的会话已被导出或登录或其他东西。怎么做。请给出您的宝贵建议。
我刚刚读到这篇文章&我创建了一个servlet FilterURL.java:

public class FilterURL extends HttpServlet implements Filter {
    @Override
    public void init(FilterConfig config) throws ServletException {
    //
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
      HttpServletResponse hsr = (HttpServletResponse) res;
      hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
      hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0.
      hsr.setDateHeader("Expires", 0); // Proxies.
      chain.doFilter(req, res);
    }

    @Override
    public void destroy() {
    //
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    //
    }
}
和my web.xml:(在web应用程序下)


过滤器
com.filter.url.sys.FilterURL
过滤器
/*
但它不起作用。我犯了什么错误???
我从这几页中读到:


  • 使用servlet过滤器链接以提高安全性

    源Oracle

    对堆栈溢出进行了解释

    有关教程,请参阅此链接。

    好的——

    过滤器可以执行许多不同类型的功能。我们将在本文中讨论斜体项目的示例:

    • 基于用户身份的身份验证阻止请求

    • 记录和审核跟踪web应用程序的用户

    • 图像转换、缩放贴图等

    • 数据压缩使下载更小

    • 针对特定区域设置的请求和响应的本地化

    • XML内容的XSL/T转换,目标是web应用程序对多种类型客户端的响应

    阅读
    过滤器中的官方文档

    HttpSession session = request.getSession(false);
                                     // don't create if it doesn't exist
    if(session != null && !session.isNew()) {
        chain.doFilter(request, response);
    } else {
        response.sendRedirect("/index.jsp");
    }
    

    请参见

    它是否再次从服务器加载页面?然后,您需要检查您的用户识别和会话代码。其他答案中给出了一些提示

    如果页面位于浏览器的缓存中,则您运气不佳,浏览器可以再次显示该页面。毕竟,这是一份本地文件

    但是有一些可能的解决方法(如果用户和会话识别有效)

    • 为过期、缓存控制设置HTTP标头,以便建议浏览器每次重新加载页面。取决于浏览器的行为
    • Go all JavaScript,即构建一个单页Web应用程序,从而完全删除后退按钮功能。有时是有效的方法,但不是每次都有效。当使用应该可以通过唯一URL访问的资源时,它不是
    • 在注销和新页面之间执行重定向(如发布后重定向),因此,单击后退按钮将引导用户进入重定向页面,并在注销后立即再次进入您发送给用户的页面
    • 在每个页面上使用一些Ajax检查用户是否仍然登录;如果没有,请重定向到登录页面
      • 通过以下方式完成:

        <script>
           history.forward();
        </script>
        
        
        历史前进();
        

        在每个页面的
        部分添加此选项将防止出现此问题。

        是否使用过滤器等工具检查每个请求的会话状态?您可以在注销后使用JS关闭浏览器窗口以防止出现这种情况。注销后,您将转发到一个页面,在该页面中,您会使用“确定”按钮发出警告消息。一旦用户单击“确定”按钮,您就关闭浏览器窗口。在这种情况下如何使用过滤器?在这种情况下如何使用过滤器?请给我一个这样的例子。谢谢,@Nikhil,非常奉承:)很好的解释+1给你,先生。如果有人在浏览器中禁用脚本并按back,会发生什么?不要依赖于客户端。信任服务器。是的,你可以写。这就是为什么我们需要过滤器链接它也在工作。这是最好的流程。但也要保留这些线路。这将提高效率:)并祝项目好运。
        HttpSession session = request.getSession(false);
                                         // don't create if it doesn't exist
        if(session != null && !session.isNew()) {
            chain.doFilter(request, response);
        } else {
            response.sendRedirect("/index.jsp");
        }
        
        <script>
           history.forward();
        </script>