我的应用程序页面上有一个AbstractAjaxTimerBehaviour,持续时间为2分钟。我的应用程序会话到期时间为30分钟(在web.xml文件中配置)。但是,我的会话无法过期,因为此行为使其保持活动状态。我该怎么做才能解决这个问题?
感谢您的帮助。
答案 0 :(得分:0)
你可以在AbstractAjaxTimerBehavior
中做一些魔术,并使用setMaxInactiveInterval()
和getLastAccessedTime()
在HttpSession
中尝试一些事情。
例如,如果您处于计时器行为(伪代码):
actualSessionLength = now() - getLastAccessedTime();
session.setmaxInactiveInterval(getMaxInactiveInterval() - actualSessionLength);
但是缩短maxInactiveInterval可能会导致计时器行为太晚。也许你可以在IAjaxCallListener
之前做到这一点?在AjaxTimerBehavior之后,您必须再次设置30分钟作为inactiveTimeInterval。
我认为很难实现。
答案 1 :(得分:0)
您可以使用另一个AbstractAjaxTimerBehavior自行使会话无效:
add(new AbstractAjaxTimerBehavior(Duration.seconds(300)) {
@Override
protected void onTimer(AjaxRequestTarget target) {
// Get current page
Page page = target.getPage();
// invalidate session
page.getSession().invalidate();
// Goto LoginPage
page.setResponsePage(YourLoginPage.class);
}
});