Don*_*Don 12 session session-timeout vaadin
我已经为Vaadin会话设置了最大非活动时间间隔,如下所示.
VaadinSession.getCurrent().getSession().setMaxInactiveInterval(60);
Run Code Online (Sandbox Code Playgroud)
添加了一个会话销毁监听器,如下所示进行测试.
servletService.addSessionDestroyListener(new SessionDestroyListener() {
public void sessionDestroy(SessionDestroyEvent event) {
System.out.println("SESSION TIMEOUT");
}
});
Run Code Online (Sandbox Code Playgroud)
在服务器端的所需时间调用此侦听器.但是我无法在浏览器端同时看到"Session Expired"消息.通常它会在第4到第5分钟之间显示.有没有办法以一致的方式同时获得这两者.
另请注意,我们目前还没有使用推送功能,目前我们不能选择它.
执行客户端轮询将重置会话的上一个活动时间,并且如果轮询间隔小于maxInactiveInterval,则可以使会话永远保持活动状态.
小智 5
Vaadin应用程序在会话生命周期中保持客户端和服务器端通信.参数调用heartbeatInterval,默认值为5分钟(300秒).所以这意味着每隔5分钟客户端询问服务器是否会话仍然存在.这就是为什么当Session被销毁时你会在Console中看到消息,并且只有在一段时间后你才能在浏览器中看到Session Expired消息.
您可以更改heartbeatInterval属性并设置较小的值(以秒为单位),但请记住,您还需要明确设置closeIdleSessions = true.在下面的示例中,我将此值设置为1秒.
@VaadinServletConfiguration(heartbeatInterval=1, closeIdleSessions=true, productionMode = false, ui = MyUI.class)
public static class Servlet extends VaadinServlet {
}
Run Code Online (Sandbox Code Playgroud)
在没有启用 @Push 以及没有任何自定义 js 小部件的情况下,以下解决方案对我有用。 首先在主类中设置 maxInactiveInterval 如下。仅显示与此解决方案相关的代码。
public class MyApplication extends UI {
@Override
protected void init(VaadinRequest request) {
VaadinSession.getCurrent().getSession().setMaxInactiveInterval(sessionTimeout);
}
}
Run Code Online (Sandbox Code Playgroud)
我们必须默认会话过期消息,如下所示。Vaadin 论坛已建议将此作为解决方案,并表示它应该在会话超时的 15 秒内起作用。
public class CustomInitServlet extends VaadinServlet {
getService().setSystemMessagesProvider(
new SystemMessagesProvider() {
@Override
public SystemMessages getSystemMessages(SystemMessagesInfo systemMessagesInfo) {
CustomizedSystemMessages customizedSystemMessages = new CustomizedSystemMessages();
customizedSystemMessages.setSessionExpiredMessage(null);
customizedSystemMessages.setSessionExpiredCaption(null);
customizedSystemMessages.setSessionExpiredNotificationEnabled(true);
return customizedSystemMessages;
}
});
// other code
}
Run Code Online (Sandbox Code Playgroud)
然后在 web.xml 中添加高心跳间隔,该间隔将高于maxInactiveInterval。
<context-param>
<param-name>heartbeatInterval</param-name>
<param-value>1200</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3411 次 |
| 最近记录: |