Сессия истекла весной MVC

#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.