Как динамически установить время ожидания сеанса в веб-приложениях Java? - PullRequest
42 голосов
/ 02 июня 2010

Мне нужно предоставить моему пользователю веб-интерфейс для изменения интервала ожидания сеанса. Таким образом, разные установки веб-приложения могут иметь разные тайм-ауты для своих сеансов, но их web.xml не может быть разным.

Есть ли способ установить время ожидания сеанса программно, чтобы я мог использовать, скажем, ServletContextListener.contextInitialized(), чтобы прочитать настроенный интервал и установить его при запуске приложения?

Большое спасибо.

Ответы [ 3 ]

66 голосов
/ 02 июня 2010

Вместо использования 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>

Тем не менее, я бы порекомендовал создавать разные файлы web.xml для каждого приложения и определять там время ожидания сеанса:

<webapp>
...
  <session-config>
    <session-timeout>15</session-timeout> <!-- in minutes -->
  </session-config>
</webapp>
32 голосов
/ 02 июня 2010

Есть ли способ установить таймаут сеанса программно

Существует три основных способа установки значения времени ожидания сеанса:

  • с использованием session-timeout в стандартном web.xml файле ~ или ~
  • при отсутствии этого элемента путем получения значения по умолчанию session-timeout сервера (и, следовательно, его настройки на уровне сервера) ~ или ~
  • программно с помощью метода HttpSession. setMaxInactiveInterval(int seconds) в вашем сервлете или JSP.

Но обратите внимание, что более поздняя опция устанавливает значение тайм-аута для текущего сеанса, это не глобальная настройка.

1 голос
/ 19 августа 2015

Как сказали другие anwsers, вы можете изменить Session Listener. Но вы можете изменить это прямо в вашем сервлете, например.

getRequest().getSession().setMaxInactiveInterval(123);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...