我已经在我的Spring MVC应用程序中实现了HttpSessionListener,它不起作用。在我的应用程序中,会话由Spring Jdbc会话管理,并与Spring Security一起使用。我从一些答案中了解到Spring jdbc不支持HttpSessionEventPublisher。
[在每种情况下,我首先尝试使用经典方式在web.xml中配置侦听器。下面的配置:
<!-- BEGIN - IDG - session management -->
<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>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
<!-- END - IDG - session management -->
<!-- BEGIN - IDG - security -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- END - IDG - security -->
<listener>
<listener-class>
it.gov.ali.listener.CustomSessionListener
</listener-class>
CustomSessionListener实现HttpSessionListener及其方法sessionDestroyed和sessionCreated。
现在,当我使用Spring Security进行注销时,会话已正确无效,并且数据库中的行会话已删除,但我没有点击自定义侦听器。
是否有使用spring jdbc配置会话侦听器的特定方法,或者我错过了什么?
谢谢大家。
如果使用Spring会话jdbc,则HttpSession由spring会话支持。因此,如果您正在使用spring-session 2.2.1.RELEASE依赖性,请在SessionRepositoryFilter类的getSession方法的第314行查找,这可能很有用,您可以重写此类以获取所需的结果。