【问题标题】:@override session.setAttribute and session.getAttribute catch event in java [duplicate]@override session.setAttribute 和 session.getAttribute 在java中捕获事件[重复]
【发布时间】:2015-06-10 08:02:40
【问题描述】:

我想在调用 session.setAttribute 和 session.getAttribute 时完成一项任务,我将捕获该事件并为键附加一些唯一值。

例如:session.setAttribute("userId","123") I will catch this event and append session.setAttribute("userId"+Guid,"123")

对于session.getAttribute("userId") will catch this event and append session.getAttribute("userId"+Guid) 并相应地返回响应。

有什么办法可以做到这一点,基本上我这样做是因为我想为使用相同浏览器选项卡的多个用户使用相同的会话。

因此,我将在特定于选项卡的 cookie 中拥有一些唯一值,并将在每个请求中获取它,并将使用 session.setAttribute("userId"+Uniqueid from Cookie which I have stored) 获取用户数据,对于 getAttribute 也是如此。

我不想用户 url 重写。

【问题讨论】:

  • @balusc 我看到了 HttpSessionBindingListener 的示例,请帮助我是否需要在 web.xml 中进行配置才能调用 valueBound 和 ValueUbound 方法。即使调用 session.getAttribute() 时也会调用此方法。因为我没有调用此方法。
  • @BalusC 我已经在我的类中实现了 HttpSessionBindingListener,请帮助我会话对象将如何实现它。如何通知会话有关 HttpSessionBindingListener 的实现
  • @BalusC 当我喜欢这个 session.setAttribute("key",new MyHttpSessionBindingListener()) 我接到一个电话,但我希望每个 session.setAttribute 和 getAttribute 我都应该接到一个电话.例如 session.setAttribute("userid",'123456") 和 session.getAttribute("userid") 我应该接到电话。
  • @BalusC 那么我必须使用 HttpSessionAttributeListener 吗?我说得对吗?你的意思是这样说。

标签: java session servlets


【解决方案1】:

您可以使用 HTTPSessionAttributeListener。查看此链接以获取示例:http://www.mkyong.com/servlet/a-simple-httpsessionattributelistener-example/

【讨论】:

  • 我试过了,但是如果我在 attributeAdded 中追加,我用追加值设置会话,它再次调用 attributeAdded 方法继续进行。 @Override public void attributeAdded(HttpSessionBindingEvent event) { String attributeName = event.getName(); Object attributeValue = event.getValue(); System.out.println("Attribute added : " + attributeName + " : " + attributeValue); session.setAttribute(event.getName()+"UniqueValue", event.getValue()); // this will again call attribute Added which keep continuing }
  • 您应该检查唯一值是否已经存在于键中。如果是,请不要追加。
  • @ramp。我的第一部分是完整的 session.setAttribute 但还有一个是待处理的 session.getAttribute 如何捕获这个事件,因为我必须更新 session.getAttribute(userid+"GUID") 中的唯一 ID 来获取数据。
  • 您应该使用已经提到的 HttpSessionAttributeListener 并且我怀疑您已经这样做了。您的问题是,当您再次使用 GUID 添加属性时,attributeAdded() 再次触发,对吗?您的 GUID 是恒定值吗?在这种情况下,只需检查属性名称是否已经包含 GUID,然后不要第二次添加。
  • 顺便说一句,getAttribute() 没有事件。查找时应该只知道属性名称,
猜你喜欢
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
  • 2018-04-27
相关资源
最近更新 更多