【问题标题】:How to implement Session Timeout in Java?如何在 Java 中实现会话超时?
【发布时间】:2012-01-05 09:52:55
【问题描述】:

我们有一个简单的基于 Java 的应用程序。在那里,我们在接收到来自客户端的 createSession() 请求时创建会话。然后我们在会话上执行“操作”,最后在接收到 release() 时,我们销毁会话对象。现在我想为应用程序实现会话超时功能。如果会话在可配置的时间内空闲,则将其销毁。我可以创建一个专用线程,该线程将在一定时间间隔后唤醒并遍历所有会话对象。根据每个对象上的“lastAccessedTimeStamp”,它会在适用时调用 release()。还有什么可以做的?可以在这里使用的其他 API 是什么?

【问题讨论】:

  • 您能否为我们提供更多关于您的应用程序上下文的精确信息?它是在应用服务器 (JavaEE) 还是独立 (JavaSE) 中运行?
  • 这是一个网络服务器(apache-tomcat + apache-cxf)。但是,我们正在创建的会话是自定义会话 (POJO)。因此,这些 POJO 的生命周期无法通过 web.xml 中的会话超时参数来控制

标签: java session session-timeout


【解决方案1】:

这是一个什么样的应用程序?对于 Web 应用程序,会话处理(包括超时)由 servlet 容器自动完成;超时值在web.xml配置文件中设置。

如果您想重新发明所有这些轮子,那么是的,一个单独的线程定期(可能每分钟一次)检查所有会话并释放超时的会话听起来是一个明智的实现。

【讨论】:

  • 这里也有同样的评论:这是一个 Web 服务器 (apache-tomcat + apache-cxf)。但是,我们正在创建的会话是自定义会话 (POJO)。因此,这些 POJO 的生命周期无法通过 web.xml 中的会话超时参数来控制。对可以使用的 API 有什么建议吗?
  • @Arnab Biswas:当然。小服务程序 API。在那里,您可以获得成熟的、得到良好支持的会话实施。如果出于某种原因你坚持要重新发明轮子,那你只能靠自己了——但这就是你想要的。
  • 谢谢。是的,我们不能使用 Servlet API 中定义的会话处理机制。我的问题是,如果我的会话是基本 POJO,可以使用 ehat 机制来实现超时吗? java.util.concurrent 包中的任何内容?
  • @ArnabBiswas 这里有些东西我绝对不明白。你怎么可能使用 Tomcat 提供的 http 基础设施而不首先考虑使用它的会话机制? This paragraph (on MVC and CXF) 建议 CXF 可以与标准网络机制共享会话信息,因此可以被视为兼容。那么,到底为什么要重新发明自己的呢?我敦促您深入了解 CXF 文档,了解如何在您的 CXF 应用程序中使用标准 Web 会话
  • @riduidel 我们正在使用的 Web 服务是另一个应用程序的客户端。因此,在我们的服务中,我们需要使用该特定应用程序公开的 API。我在这里提到的 POJO 只不过是该特定 API 框架提供的一个 API 对象。这里的会话更多是业务逻辑而不是框架功能。
猜你喜欢
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
相关资源
最近更新 更多