2013-04-24 43 views
3

我有一种情况 - 从某个页面注销后,如果有人在浏览器中单击“返回”按钮,它会自动再次进入后退页面。在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应用)

<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
+0

您是否使用过滤器来检查每个请求的会话状态? – Aquillo 2013-04-24 13:39:20

+0

注销后,您可以使用JS关闭浏览器窗口,以防止出现这种情况。 – Apurv 2013-04-24 13:41:44

+0

一旦你注销,你转到一个页面,你通过“确定”按钮提示消息。只要用户点击“确定”按钮,就关闭浏览器窗口。 – IndoKnight 2013-04-24 13:43:30

回答

1

使用Servlet过滤器链更好的安全性。

源甲骨文

说明存在于堆栈溢出

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

+0

如何在这种情况下使用过滤器?请给我一个这种情况的例子。 – 2013-04-24 13:45:40

+0

-1没有解释或例子 – kostja 2013-04-24 13:46:26

+0

没用了.. – kostja 2013-04-24 13:48:32

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。 – 2013-04-24 14:11:36

1

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

如果页面在浏览器的缓存中,那么您运气不好,浏览器可能会再次显示它。毕竟,这是一个本地文件。

但有几种可能的解决方法(如果您的用户&会话识别工作)。

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

很好的解释+1为您先生。 – 2013-04-24 13:54:15

0

它通过这个工作:

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

在每个页面将防止这个问题的<head>部分添加此。

+1

如果某人在浏览器中禁用脚本并按回来会发生什么情况?不要依赖于客户端。信任服务器。 – 2013-04-24 17:35:47

+0

是的,你写。这就是为什么我们需要过滤器链接它也在工作。那是最好的过程。 – 2013-04-25 12:20:48

+0

但是也要保持这些线条。这会带来更多的效率:)并且会带来好的项目。 – 2013-04-25 12:22:49

相关问题