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

Jon*_*ijo 44 java session timeout servlets java-ee

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

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

非常感谢.

Mic*_*ael 69

不使用ServletContextListener,而是使用HttpSessionListener.在该HttpSessionListener方法中,您可以以编程方式设置会话超时.

public class MyHttpSessionListener implements HttpSessionListener {

  public void sessionCreated(HttpSessionEvent event){
      event.getSession().setMaxInactiveInterval(15 * 60); // in seconds
  }

  public void sessionDestroyed(HttpSessionEvent event) {}

}
Run Code Online (Sandbox Code Playgroud)

并且不要忘记在部署描述符中定义侦听器:

<webapp>
...      
  <listener>                                  
    <listener-class>com.example.MyHttpSessionListener</listener-class>
  </listener>
</webapp>
Run Code Online (Sandbox Code Playgroud)

不过,我建议为每个应用程序创建不同的web.xml文件,并在那里定义会话超时:

<webapp>
...
  <session-config>
    <session-timeout>15</session-timeout> <!-- in minutes -->
  </session-config>
</webapp>
Run Code Online (Sandbox Code Playgroud)


Pas*_*ent 33

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

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

  • 通过使用session-timeout标准web.xml文件中的〜或〜
  • 在没有这个元素的情况下,通过获取服务器的默认session-timeout值(从而在服务器级别配置它)〜或〜
  • 通过使用HttpSession. setMaxInactiveInterval(int seconds)Servlet或JSP中的方法以编程方式.

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