Я должен дать моему пользователю веб-интерфейс для изменения интервала тайм-аута сессии. Так, различные установки веб-приложения смогли бы иметь различные тайм-ауты для своих сессий, но их 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>
(или, начиная с версии сервлета 3.0, вместо этого можно использовать аннотацию @WebListener
).
Тем не менее, я бы порекомендовал создать разные файлы web.xml для каждого приложения и указать там тайм-аут сеанса:
<webapp>
...
<session-config>
<session-timeout>15</session-timeout> <!-- in minutes -->
</session-config>
</webapp>
Есть ли способ программно установить тайм-аут сеанса
В основном есть три способа установить значение тайм-аута сеанса:
тайм-аута сеанса
в стандартном веб-сайте .xml
файл ~ или ~ сервера по умолчанию
(и, таким образом, настройки его на уровне сервера) ~ или ~ HttpSession. setMaxInactiveInterval (int seconds)
в вашем сервлете или JSP. Но обратите внимание, что более поздняя опция устанавливает значение тайм-аута для текущего сеанса, это не глобальная настройка.