Статьи

Spring Java Configuration: время ожидания сеанса

Весна-каркасный Логотип

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