需要valueUnbound中的会话变量吗?

时间:2011-07-09 21:29:45

标签: jsf-2 session-variables session-timeout spring-webflow-2

我正在使用HttpSessionBindingListener的valueUnbound方法在会话即将到期之前释放锁(数据库中的一个条目):

@Override

public void valueUnbound(HttpSessionBindingEvent event) {
  String user = (String) event.getSession().getAttribute("currentUsr");
  removeLock(user);
}

设置锁定后,我将用户名设置为会话变量  我在删除锁定方法中需要这个“用户名”。但是getAttribute抛出异常:

  

java.lang.IllegalStateException:getAttribute:会话已经失效

我需要帮助才能获得会话变量?或者有没有其他方法来获取用户名?


不,因为会话已失效。

虽然,我想出了解决方案,但我通过servlet上下文设置了属性 valueBound方法并通过 event.getSession()。getServletContext()。getAttribute(“cUser”);

它工作正常。谢谢EJP


我得到你的观点EJP,你是对的,我让它变得复杂,我可以从event.getValue()得到它。给你答案+1,谢谢。

1 个答案:

答案 0 :(得分:2)

  

虽然,我想出了解决方案,但我在valueBound方法中通过servlet上下文设置属性并通过:event.getSession().getServletContext().getAttribute("cUser");

获取它

所以..您正在应用程序范围中存储会话范围的数据。您是否意识到这种方式是在webapp的所有访问者之间共享数据?访问者X然后将看到访问者Y设置的属性,该访问者Y稍后访问了该网站。它使问题变得更糟。

无论如何,至于具体问题,正如异常消息试图告诉你的那样,会话已经在那时失效了。有两种方法可以解决这个问题:

  1. 使currentUsr成为实现HttpSessionBindingListener的类的属性,这样您就不需要将其作为独特的会话属性来获取。< / p>

  2. 请改用HttpSessionListener。 {/ 1}}方法在失效之前被称为,因此您仍然可以访问所有属性。