获取活动 UI 的“会话已过期”消息

问题描述

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

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

谁能帮忙找出原因?

Session Expired

解决方法

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

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

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