java - Struts2 拦截器跟踪 session 超时前的最后一页

标签 java jakarta-ee struts2

我有一个网络应用程序,如果用户 session 超时并且他们尝试再次登录,我需要将他们重定向到上次访问的页面。仅适用于 session 超时,如果用户注销,我不需要此映射。

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

最佳答案

注册一个 HttpSessionListener 怎么样(看看这个 answer )。这样,当 session 被销毁时,您将收到通知,因此这是您将上次访问页面的信息保存到数据库的最佳时机。

您的 session 监听器应如下所示:

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...
  } 
  .
  .
  .
}

要注册您的 session 监听器,请将以下代码添加到您的 Web.xml 中:

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

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

[编辑]

根据官方文档,关于通过 HttpSessionEvent 访问 session 对象:

The container creates a javax.servlet.http.HttpSessionEvent object that is input for calls to HttpSessionListener methods. The HttpSessionEvent class includes the following method, which your listener can call:

HttpSession getSession()

Use this method to retrieve the session object that was created or destroyed, from which you can obtain information as desired. See "Introduction to Servlet Sessions" for information about the javax.servlet.http.HttpSession interface.

基于此,我认为您仍然可以从“已破坏的” session 中获取数据。

关于java - Struts2 拦截器跟踪 session 超时前的最后一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12305971/

相关文章:

java - 如何在 Struts 2 JSP 结果中链接到外部网站上的图像/css 文件?

Java LibGDX : How to get a map based coordinate system?

java - 不使用 Joda Time 的 Java 时间转换

java - Spring MVC 与 XML

java - 如何将同一模式但在不同代中生成的类设置为彼此的请求/响应对象而不遍历它们?

java - struts2中的http post方法

java - 更改 java 中现有 jar 文件的编译版本

java - 计算 Java EE 网络应用程序中用户数量的最佳方法

java - 如何将可下载文件放入 HttpServletResponse?

java - 如何配置 Struts 2 上传文件夹?