如何在Java Web应用程序中动态设置会话超时?
2022-08-31 21:20:21
我需要为我的用户提供一个 Web 界面来更改会话超时间隔。因此,Web 应用程序的不同安装将能够为其会话设置不同的超时,但它们不能不同。web.xml
有没有办法以编程方式设置会话超时,以便我可以使用,例如,读取配置的间隔并在应用程序启动时进行设置?ServletContextListener.contextInitialized()
我需要为我的用户提供一个 Web 界面来更改会话超时间隔。因此,Web 应用程序的不同安装将能够为其会话设置不同的超时,但它们不能不同。web.xml
有没有办法以编程方式设置会话超时,以便我可以使用,例如,读取配置的间隔并在应用程序启动时进行设置?ServletContextListener.contextInitialized()
与其使用 ServletContextListener,不如使用 HttpSessionListener
。
在 sessionCreated()
方法中,可以通过编程方式设置会话超时:
public class MyHttpSessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent event){
event.getSession().setMaxInactiveInterval(15 * 60); // in seconds
}
public void sessionDestroyed(HttpSessionEvent event) {}
}
不要忘记在部署描述符中定义侦听器:
<webapp>
...
<listener>
<listener-class>com.example.MyHttpSessionListener</listener-class>
</listener>
</webapp>
(或者从Servlet版本3.0开始,您可以使用@WebListener
注释)。
不过,我建议为每个应用程序创建不同的web.xml文件,并在那里定义会话超时:
<webapp>
...
<session-config>
<session-timeout>15</session-timeout> <!-- in minutes -->
</session-config>
</webapp>
有没有办法以编程方式设置会话超时
基本上有三种方法可以设置会话超时值:
session-timeout
web.xml
session-timeout
HttpSession. setMaxInactiveInterval(int seconds)
方法,以编程方式进行编程。但请注意,后面的选项设置当前会话的超时值,这不是全局设置。