gpt4 book ai didi

java - 关闭 session 后立即销毁监听器

转载 作者:行者123 更新时间:2023-12-04 07:40:17 24 4
gpt4 key购买 nike

我正在处理 session 管理面板。我想通过单击按钮来终止另一个用户的 session 。我使用 VaadinSession 对象创建了网格,并使用 VaadinSession.close() 功能创建了按钮,但在 close() 销毁 session 监听器后不会立即触发,他的网站也不会重新加载。它在一段时间后被触发,但是当用户关闭 session 点击他网站上的任何东西时,destroyListener 会更快地触发。
关闭 session 后是否有任何选项可以立即触发 DestroyListener?

最佳答案

VaadinSession.close()只是 sets a flag声明 session 将关闭。在处理来自该 session 的请求时执行实际清理。这就是为什么单击按钮会触发 SessionDestroyListener(或者,心跳也会产生相同的效果)。
使用 Vaadin 14+,您可以强制关闭 session 中的每个 UI 执行无操作,以便进行服务器-客户端往返。

session.getUIs().stream().forEach(ui->ui.getElement().executeJs("return"));
在那时候:
a) 服务器会意识到当前 session 已关闭,然后 session 将被销毁(并替换为新 session )
b) 客户端将为新 session 重新加载每个浏览器选项卡。
@Push
@Route
public class MainView extends VerticalLayout {

public MainView() {
ApplicationServiceInitListener.sessions.forEach(session->{
if (session!=VaadinSession.getCurrent()) {
Button btn = new Button("Close "+session.hashCode());
btn.addClickListener(ev->{session.access(()->close(session)); remove(btn);});
add(btn);
}});
}

private void close(VaadinSession session) {
session.getUIs().stream().forEach(ui->ui.getElement().executeJs("return"));
session.close();
}


}

关于java - 关闭 session 后立即销毁监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67516430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com