Как установить тайм-аут сессии динамично в веб-приложениях Java?

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

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

44
задан Carlos Cavero 27 September 2019 в 16:36
поделиться

2 ответа

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

(или, начиная с версии сервлета 3.0, вместо этого можно использовать аннотацию @WebListener ).


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

<webapp>
...
  <session-config>
    <session-timeout>15</session-timeout> <!-- in minutes -->
  </session-config>
</webapp>
69
ответ дан 26 November 2019 в 21:54
поделиться

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

В основном есть три способа установить значение тайм-аута сеанса:

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

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

33
ответ дан 26 November 2019 в 21:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: