Мы живем в приятное время, когда вы можете разработать приложение 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 Алексея Зволинского в блоге заметок Фрузенштейна . |
