我正在尝试为我的应用程序配置会话超时。

在web.xml中,我配置了分钟,如下所示:

<session-config>
        <session-timeout>1</session-timeout>
    </session-config>


为确保我创建的侦听器一切正常,请参阅:

<listener>
    <listener-class>br.com.sender.util.SessionListener</listener-class>
</listener>


请参阅我的侦听器类:

package br.com.sender.util;

import java.util.Date;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class SessionListener implements HttpSessionListener {
    public void sessionCreated(HttpSessionEvent event) {
        System.out.printf("Session ID %s created at %s%n", event.getSession().getId(), new Date());
    }

    public void sessionDestroyed(HttpSessionEvent event) {
        System.out.printf("Session ID %s destroyed at %s%n", event.getSession().getId(), new Date());
    }
}


当我登录我的应用程序时,将创建会话(与此同时,我将一个userMB与sessionScope存储在一起),请参阅:

Session ID 801040FAFEBC8D21C3C8E0DA56BF9B27 created at Tue Jun 10 18:44:33 BRT 2014


几分钟后,如果不执行任何操作,会话将被破坏:

Session ID 801040FAFEBC8D21C3C8E0DA56BF9B27 destroyed at Tue Jun 10 18:46:26 BRT 2014


当用户单击某些菜单或按钮时,将再次创建会话,但是我希望销毁UserMB(SessionScope),并且用户必须再次登录,但是这种情况不会发生,用户可以继续使用应用程序而无需重新登录。

最佳答案

您需要一个WebFilter来检查会话范围内的某些属性并确定用户是否已登录

09-11 19:32