3

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

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

一切正常。但是注销后,如果我在浏览器中单击返回按钮(左上角),它会回到我所在的位置。如果我单击返回,我想这样做,那么必须说您的会话已过期或登录或其他。怎么做。请提出您宝贵的建议。
我刚读到这个&我创建了一个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. 如何在 Java 中使用 servlet 过滤器来更改传入的 servlet 请求 url?
  2. 防止用户在注销后看到以前访问过的安全页面
  3. http://tutorials.jenkov.com/java-servlets/servlet-filters.html
  4. servlet会话,注销后,当按下浏览器的后退按钮时,再次显示安全页面
4

4 回答 4

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

请参阅在 servlet 和 jsp 中检查会话

于 2013-04-24T13:44:09.303 回答
1

使用 servlet 过滤器链接以获得更好的安全性。

来源甲骨文

堆栈溢出时存在解释

如何在 Java 中使用 servlet 过滤器来更改传入的 servlet 请求 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

于 2013-04-24T13:40:07.583 回答
1

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

如果该页面在浏览器的缓存中,那么您很不走运,浏览器可以再次显示它。毕竟是本地文件。

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

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

它是这样完成的:

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

在每个页面的部分添加<head>它可以防止这个问题。

于 2013-04-24T15:01:35.923 回答