如何拦截会话结束并获取属性?

时间:2014-03-19 16:23:41

标签: java spring session spring-mvc spring-security

您好我需要拦截我的网络应用程序中的会话过期。

我会拦截它,因为我想要获取会话属性,并在销毁会话之前存储它。

有可能??你能给我任何建议吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

您可以使用HttpSessionListener

看起来像这样:

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

@WebListener
public class MyHttpSessionListener implements HttpSessionListener {

  @Override
  public void sessionDestroyed(HttpSessionEvent se) {
    Object attribute = se.getSession().getAttribute("foo");
  }

  @Override
  public void sessionCreated(HttpSessionEvent se) {
  }

}

答案 1 :(得分:3)

我认为您希望在会话被销毁之前从会话中获取该属性,并将其“存储”在其他地方。

下面使用的 sessionDestroyed 在会话被销毁后被调用,我不确定servlet容器是否会让你在会话被销毁后获取属性,但这值得尝试。

在那种情况下:

  1. 实施 HttpSessionListener 界面。我们称之为 com.app.MySessionListener
  2. sessionDestroyed(HttpSessionEvent e)中,编写以下代码:

    Object attr = e.getSession().getAttribute("attr_name");
    
  3. 将此'attr'对象存储在其他位置。

  4. 即使会话被销毁,您仍然会引用'attr'对象。

    通常,您将在web.xml中注册MySessionListener:

    <web-app ...>
        <listener>
            <listener-class>com.app.MySessionListener</listener-class>
        </listener>
    </web-app>
    

答案 2 :(得分:2)

实现HttpSessionListener并覆盖sessionDestroyed(HttpSessionEvent事件)方法以根据您的要求进行自定义。