Java Struts2拦截器跟踪会话超时前的最后一页

Java Struts2拦截器跟踪会话超时前的最后一页,java,jakarta-ee,struts2,Java,Jakarta Ee,Struts2,我有一个web应用程序,如果用户会话有timedout,并且他们试图再次登录,我需要将他们重定向到上次访问的页面。仅针对会话超时,如果用户注销,我不需要此映射 我知道它可以使用拦截器和应用程序范围映射来完成。但是你能给我一个更新当前用户url的拦截器的代码示例吗?还有我的应用程序范围对象。在5小时不重新登录后,如何删除该用户对最后一页的引用???如何注册HttpSessionListener(看看这个)。这样,当会话被破坏时,您将收到通知,所以这是您将上次访问页面的信息保存到数据库的最佳时机 您

我有一个web应用程序,如果用户会话有timedout,并且他们试图再次登录,我需要将他们重定向到上次访问的页面。仅针对会话超时,如果用户注销,我不需要此映射


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

如何注册
HttpSessionListener
(看看这个)。这样,当会话被破坏时,您将收到通知,所以这是您将上次访问页面的信息保存到数据库的最佳时机

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

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>

com.rr87.YourSessionListener
答案的最后一部分。。成功注销后,您可以删除数据库中上次访问的页面引用

[编辑]

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

容器创建javax.servlet.http.HttpSessionEvent对象 这是调用HttpSessionListener方法的输入。这个 HttpSessionEvent类包括以下方法,您的 侦听器可以调用:

HttpSession getSession()

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


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

我如何在拦截器中获取上次访问的页面信息?将请求。getRequestURL()提供当前页面的url信息?您理解错了
YourSessionListener
不是侦听器,它是侦听器。。。您应该在拦截器或servlet过滤器中获取上次访问的url,该拦截器或servlet过滤器会在每个请求中启动,并将其存储到会话中,以便在您的SessionListener中检索该url。因此,我将有一个拦截器,它将使用request.getRequestURL()获取url,我将在何处存储该值?它不能是会话,因为会话被销毁后会调用sessionListener销毁方法,对吗??。。。我会将其存储在数据库中吗?你能解释一下流程吗?基于对这个的评论,我认为你仍然可以得到HttpSession对象。。。如果我错了,请纠正我。。。