【问题标题】:Getting "Session Expired" message for the active UI获取活动 UI 的“会话已过期”消息
【发布时间】:2021-06-03 08:57:21
【问题描述】:

我们基于 Java 8 和 Spring 的应用程序正在后台生成批量报告(PDF 文件)。这可能需要一到两个多小时。生成每个报告后,作为百分比值的进度已在 UI(前端)中更新,因此 UI 在完成报告生成之前一直处于活动状态,但由于某种原因,我们得到 Session Expired 在报告生成过程中来自 Vaadin 框架的 UI 中的消息。

Vaadin 框架版本:7.6.2
网络服务器:Tomcat 7
心跳持续时间的值:默认值(未配置显式值)
web.xml 中会话超时持续时间的值:默认为 30 分钟
closeIdleSessions 的值没有变化(默认为 closeIdleSessions=false)

谁能帮忙找出原因?

【问题讨论】:

  • Push 使用的传输方式是什么?你前面有代理吗,什么是连接超时?
  • @Tatu Lund Push 配置没有明确的值,我认为默认情况下它是 Automatic。应用程序部署在 Azure 应用服务中。
  • 如果你只是Push没有值,默认是WebSocket,看Leif的回答。

标签: java spring vaadin vaadin7


【解决方案1】:

如果唯一的活动是通过@Push websocket 推送状态更新,那么这可能不足以推迟 servlet 级别的会话到期。

您可以通过确保不时发出来自客户端的正常请求来解决此问题,然后只是重置会话超时。这可以通过启用长间隔的 UI 轮询来完成,例如ui.setPollInterval((int) Duration.ofMinutes(25).toMillis());.

记住在长任务完成后禁用轮询,否则它将继续保持会话活动。

【讨论】:

    猜你喜欢
    • 2012-02-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 2016-08-04
    • 2017-06-01
    • 1970-01-01
    相关资源
    最近更新 更多