Мы живем в приятное время, когда вы можете разработать приложение Spring, используя конфигурацию на основе Java. Больше нет избыточного XML-кода, только чистый код Java. В этой статье я хочу обсудить популярную тему об управлении сессиями в приложениях Spring. Если быть более точным, я буду говорить о тайм-ауте сессии в стиле конфигурации Java.
Итак, в одном из моих предыдущих постов в блоге я уже говорил, как управлять сессией на протяжении всей жизни. Но это решение подразумевает использование файла web.xml , который не требуется для конфигов на основе Java. Потому что его роль играет класс, который расширяет класс AbstractAnnotationConfigDispatcherServletInitializer . Часто это выглядит примерно так:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import javax.servlet.Filter; import org.springframework.web.filter.HiddenHttpMethodFilter; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class Initializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return null ; } @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[] { WebAppConfig. class }; } @Override protected String[] getServletMappings() { return new String[] { "/" }; } @Override protected Filter[] getServletFilters() { return new Filter[] { new HiddenHttpMethodFilter() }; } } |
Я много писал об использовании таких конфигураций , но здесь мы должны обратить особое внимание на классы, которые расширяет AbstractAnnotationConfigDispatcherServletInitializer . Я говорю о классе AbstractDispatcherServletInitializer . В свою очередь, он имеет метод onStartup (ServletContext servletContext) . Его целью является настройка ServletContext с любыми сервлетами, фильтрами, контекстными параметрами слушателей и атрибутами, необходимыми для инициализации этого веб-приложения.
Непосредственно в этом месте самое время вспомнить об интерфейсе HttpSessionListener . Как вы уже догадались в реализации этого интерфейса, мы можем управлять каждым только что созданным сеансом и приложением. Например, мы можем установить максимальный неактивный интервал, равный 5 минутам:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class SessionListener implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent event) { System.out.println( "==== Session is created ====" ); event.getSession().setMaxInactiveInterval( 5 * 60 ); } @Override public void sessionDestroyed(HttpSessionEvent event) { System.out.println( "==== Session is destroyed ====" ); } } |
Чтобы применить эти изменения управления сеансом в наших конфигурациях на основе Java, мы должны добавить следующий фрагмент кода в класс Initializer :
1
2
3
4
5
6
7
|
... @Override public void onStartup(ServletContext servletContext) throws ServletException { super .onStartup(servletContext); servletContext.addListener( new SessionListener()); } ... |
Это все фанаты Java, наслаждайтесь кодированием.
Ссылка: | Конфигурация Spring Java: время ожидания сеанса от нашего партнера по JCG Алексея Зволинского в блоге заметок Фрузенштейна . |