我有一个 Web 应用程序,如果用户会话超时并且他们尝试再次登录,我需要将它们重定向到上次访问的页面。仅用于会话超时,如果用户注销我不想要此映射。
我知道可以使用拦截器和应用程序范围映射来完成。但是你能给我一个更新当前用户 url 的拦截器的代码示例吗?还有我的应用程序范围对象..在说 5 小时没有重新登录后我怎么说删除对该用户最后一页的引用???
我有一个 Web 应用程序,如果用户会话超时并且他们尝试再次登录,我需要将它们重定向到上次访问的页面。仅用于会话超时,如果用户注销我不想要此映射。
我知道可以使用拦截器和应用程序范围映射来完成。但是你能给我一个更新当前用户 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>
答案的最后一部分..您可以在成功注销时删除数据库中上次访问的页面引用。
[编辑]
从官方文档中,关于会话对象可访问的槽HttpSessionEvent
:
容器创建一个 javax.servlet.http.HttpSessionEvent 对象,作为调用 HttpSessionListener 方法的输入。HttpSessionEvent 类包括以下方法,您的侦听器可以调用该方法:
HttpSession getSession()
使用此方法检索已创建或已销毁的会话对象,您可以从中获取所需的信息。有关 javax.servlet.http.HttpSession 接口的信息,请参阅“Servlet 会话简介”。
基于此,我认为您仍然可以从“销毁”会话中获取数据。