Struts2拦截器在会话超时之前跟踪最后一页

时间:2012-09-06 18:12:16

标签: java java-ee struts2

我有一个Web应用程序,如果用户会话有timedout并且他们尝试再次登录,我需要将它们重定向到上次访问的页面。仅限会话超时,如果用户退出,我不想要这个映射。

我知道可以使用拦截器和应用程序范围映射来完成。但是,你能给我一个拦截器的代码示例来更新当前用户的URL吗?另外我的应用程序范围对象..我说在没有重新登录的5小时后删除对该用户的最后一页的引用???

1 个答案:

答案 0 :(得分:1)

如何注册HttpSessionListener(请查看此answer)。这样,当会话被销毁时,您将收到通知,因此这是您可以将有关上次访问过的页面的信息保存到数据库的最佳时间。

您的会话侦听器应如下所示:

package com.rr87;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class YourSessionListener implements HttpSessionListener {
  @Override
  public void sessionDestroyed(HttpSessionEvent event) {
    // Implement logic to save last visited page to database...
  } 
  .
  .
  .
}

要注册会话侦听器,请将以下代码添加到 Web.xml

<web-app ...>
    <listener>
          <listener-class>com.rr87.YourSessionListener</listener-class>
    </listener>
</web-app>

答案的最后一部分..您可以在sucesfull注销时删除数据库中上次访问的页面引用。

<强> [编辑]

从官方文档中,关于可通过HttpSessionEvent访问的会话对象:

  

容器创建一个javax.servlet.http.HttpSessionEvent对象   这是对HttpSessionListener方法的调用的输入。该   HttpSessionEvent类包含以下方法,您的   听众可以打电话:

     

HttpSession getSession()

     

使用此方法检索已创建的会话对象或   销毁,您可以根据需要获取信息。看到   “Servlet会话简介”有关的信息   javax.servlet.http.HttpSession接口。

基于我认为,您仍然可以从“已销毁”会话中获取数据。