#java #session #spring-mvc #session-timeout
#java #сессия #spring-mvc #тайм-аут сеанса
Вопрос:
Как я могу обработать сеанс, истекший в spring MVC, и как лучше всего с этим справиться? где я могу указать время ожидания сеанса? Было бы здорово, если бы вы могли показать мне это на каком-нибудь примере.
Ответ №1:
Для тайм-аута сеансов я использую «простой» Servlet API.
Пользовательский javax.servlet.http.HttpSessionListener
определен в web.xml и в методе sessionCreated
на сеансе установите тайм-аут, используя setMaxInactiveInterval
(в [s]).
Я знаю, что это «старая школа», но она проста и работает для меня.
Если вы хотите получить значение тайм-аута из spring, есть доступ к ServletContext из сеанса.
ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(session.getServletContext());
applicationContext.getBean("...");
Комментарии:
1. Alephx, спасибо за ваш ответ. Я хотел знать, где в классах контроллеров я должен это проверить. Должен ли я написать отдельный класс или метод для его обработки и каков наилучший способ проверки сеанса?
2. Мой ответ касался установки собственного тайм-аута сеанса в коде приложения. Не уверен, что вы можете проверить состояние сеанса. Сеансы управляются контейнером (Tomcat и т.д.) — если срок действия сеанса истекает, это делает его недействительным. Вы можете только проверить, действителен ли сеанс. Для этого вам нужен Filter [способ сервлета] или Spring interceptor
org.springframework.web.servlet.HandlerInterceptor
[Способ Spring MVC]
Ответ №2:
Одним из вариантов является использование механизма событий в ApplicationContext, затем вы должны зарегистрировать HttpSessionListener в web.xml что при истечении времени ожидания сеанса происходит событие в корневом WebApplicationContext для всех компонентов, которые наблюдают это событие. Получите корневой WebApplicationContext с помощью WebApplicationContextUtils.