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

时间:2013-04-24 13:35:42

标签: jsp java-ee servlet-filters logout back-button-control

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

session.invalidate();
request.getRequestDispatcher("index.jsp").forward(request,response);

一切正常。但是在退出后如果我在浏览器中单击“返回”按钮(左上角),它会回到原来的位置。如果我点击返回然后必须说你的会话是Expiered或登录或其他什么我想做。怎么做。请提出宝贵的建议 我刚看过这个&我创建了一个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 {
    //
    }
}

我的web.xml :(在web-app下)

<filter>
    <filter-name>FilterURL</filter-name>
    <filter-class>com.filter.url.sys.FilterURL</filter-class>
</filter>
<filter-mapping>
    <filter-name>FilterURL</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

但它无法正常工作。我错了什么?我从这个页面读到了它:

  1. How to use a servlet filter in Java to change an incoming servlet request url?
  2. Prevent user from seeing previously visited secured page after logout
  3. http://tutorials.jenkov.com/java-servlets/servlet-filters.html
  4. servlet session , after logout , when back button of browser is pressed , again the secure page is shown

4 个答案:

答案 0 :(得分:4)

filter

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");
}

请参阅checking session in servlet and jsp

答案 1 :(得分:1)

使用servlet Filter链接以提高安全性。

来源Oracle

堆栈溢出时出现说明

How to use a servlet filter in Java to change an incoming servlet request url?

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

http://viralpatel.net/blogs/tutorial-java-servlet-filter-example-using-eclipse-apache-tomcat/

一个好的 - http://tutorials.jenkov.com/java-servlets/servlet-filters.html

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

  • 身份验证 - 根据用户身份阻止请求。

  • 记录和审核 - 跟踪Web应用程序的用户。

  • 图片转换 - 缩放地图等。

  • 数据压缩 - 缩小下载量。

  • 本地化 - 将请求和响应定位到特定区域设置。

  • XML内容的XSL / T转换 - 将Web应用程序响应定位到更多类型的客户端。

阅读官方文档http://www.oracle.com/technetwork/java/filters-137243.html

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:0)

由此完成:

<script>
   history.forward();
</script>

在每个页面的<head>部分添加此项,可以防止出现此问题。