如何限制 Vaadin 14 尝试发送心跳请求的次数

问题描述

我们有一个 Vaadin 14 (Flow) 应用程序,它以 Apache 反向代理为前端,该代理与 Gluu 集成以使用 OpenID (mod_auth_openidc) 进行身份验证。

这通常工作正常,除非用户在应用程序空闲很长时间的情况下将浏览器保持打开状态,直到达到 OpenID 会话的最大会话时间。问题是,此时 Vaadin 客户端不断尝试发送心跳请求。这与 this mod_auth_openidc issue 相结合,会导致状态 cookie 堆积并达到限制,因此用户必须关闭浏览器才能重新登录。

我尝试了各种方法(未成功),以便在会话超时(结合 vaadin.closeIdleSessions=true)后收到心跳请求时让服务器指示浏览器访问注销 URL,但即使它起作用了,它不会成为当时也可能打开并发送心跳请求的其他浏览器选项卡的解决方案。

我们真正想要的是限制 Vaadin 客户端重试发送心跳请求的次数(比如最多 3 次),然后停止发送请求(可能显示一条消息以重新登录)。

这有可能吗?当前的解决方法是完全禁用心跳,但这似乎并不理想(Vaadin 不会检测空闲 UI)。

解决方法

UI 实例有一个 ReconnectDialogConfiguration,它包含 reconnectAttempts 属性来控制重试请求(包括心跳请求)的次数。默认好像是 10000。

在 Vaadin 14 (LTS) 中,可以使用 PageConfigurator 进行设置。

在 Vaadin 18(最新版本)中,这是使用 AppShellConfigurator

,

禁用心跳是要走的路。如果您需要比这更细微的东西,您需要对 Heartbeats 在 Vaadin 中的工作方式进行更改(可能添加一个配置选项)。在 GitHub 中创建票证可能是一个不错的起点。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...