Недавно мы начали интегрировать весеннюю сессию в наш проект. Это приложение на основе SOA и имеет некоторые логические реализации для управления сеансами.
- HttpSessionListener, который мы используем для выхода из сеансов в случае тайм-аута и отслеживаем через sessionDestroyed(HttpSessionEvent httpSessionEvent).
- ServletRequestListener, который мы используем для управления инвалидацией сеанса HTTP. Это реализовано в методе requestDestroyed(ServletRequestEvent servletRequestEvent).
По пункту №1 я нашел статью здесь, в котором описывается использование SessionEventHttpSessionListenerAdapter, поддерживаемое Spring Session. И добавьте эту конфигурацию в мой session.xml.
<context:annotation-config/>
<bean class="org.springframework.session.hazelcast.config.annotation.web.http.HazelcastHttpSessionConfiguration"/>
<bean class="org.springframework.session.web.http.SessionEventHttpSessionListenerAdapter">
<constructor-arg>
<list>
<bean class="xxx.xxx.xxx.xxx.xxx.xxx.MyHttpSessionListener"/>
</list>
</constructor-arg>
</bean>
Также добавлена ниже конфигурация в моем дескрипторе развертывания (например, web.xml)
<filter>
<filter-name>springSessionRepositoryFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSessionRepositoryFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
После некоторой отладки я заметил, что мой HttpSessionListener использует сеанс, предоставленный весенним сеансом.
Однако для элемента № 2, используя реализацию ServletRequestListener, я не смог найти способ перенести его на весенний сеанс. Он все еще использует сеанс, предоставленный контейнером.
Есть ли соответствующий адаптер, например SessionEventHttpSessionListenerAdapter, предназначенный для ServletRequestListener? Поддерживается ли это Spring Session? Какие еще варианты у меня есть, чтобы наша функциональность работала с весенней сессией?