如何在Java Web应用程序中动态设置会话超时?

2022-08-31 21:20:21

我需要为我的用户提供一个 Web 界面来更改会话超时间隔。因此,Web 应用程序的不同安装将能够为其会话设置不同的超时,但它们不能不同。web.xml

有没有办法以编程方式设置会话超时,以便我可以使用,例如,读取配置的间隔并在应用程序启动时进行设置?ServletContextListener.contextInitialized()


答案 1

与其使用 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>

答案 2

有没有办法以编程方式设置会话超时

基本上有三种方法可以设置会话超时值:

  • 通过使用标准文件中的 ~or~session-timeoutweb.xml
  • 在没有此元素的情况下,通过获取服务器的默认值(从而在服务器级别对其进行配置)~or~session-timeout
  • 通过在 Servlet 或 JSP 中使用 HttpSession. setMaxInactiveInterval(int seconds) 方法,以编程方式进行编程。

但请注意,后面的选项设置当前会话的超时值,这不是全局设置。


推荐