On this page
5. HttpSession Integration
Spring Session 提供与HttpSession
的透明集成。这意味着开发人员可以使用 Spring Session 支持的实现切换HttpSession
实现。
5.1 为什么选择 Spring Session 和 HttpSession?
我们已经提到过,Spring Session 提供了与HttpSession
的透明集成,但是我们可以从中获得什么好处呢?
集群会话 -Spring Session 使得支持clustered sessions变得很简单,而不必依赖于特定于应用程序容器的解决方案。
RESTful APIs -Spring Session 允许在 Headers 中提供会话 ID 以与RESTful APIs一起使用
5.2 与 Redis 的 HttpSession
通过在使用HttpSession
的任何内容之前添加一个 Servlet 过滤器来启用将 Spring Session 与HttpSession
一起使用。您可以使用以下任一方法来启用此功能:
5.2.1 基于 Redis Java 的配置
本节介绍如何使用 Redis 通过基于 Java 的配置来备份HttpSession
。
Note
HttpSession Sample提供了有关如何使用 Java 配置集成 Spring Session 和HttpSession
的工作示例。您可以阅读下面的集成基本步骤,但是建议您在与自己的应用程序集成时遵循详细的 HttpSession 指南。
Spring Java 配置
添加所需的依赖关系之后,我们可以创建我们的 Spring 配置。 Spring 配置负责创建一个 Servlet 过滤器,该过滤器将HttpSession
实现替换为 Spring Session 支持的实现。添加以下 Spring 配置:
@EnableRedisHttpSession (1)
public class Config {
@Bean
public LettuceConnectionFactory connectionFactory() {
return new LettuceConnectionFactory(); (2)
}
}
- (1)
@EnableRedisHttpSession
Comments 创建一个名称为springSessionRepositoryFilter
的 Spring Bean,用于实现 Filter。过滤器负责替换由 Spring Session 支持的HttpSession
实现。在这种情况下,Spring Session 由 Redis 支持。 - (2) 我们创建一个
RedisConnectionFactory
,将 Spring Session 连接到 Redis Server。我们将连接配置为在默认端口(6379)上连接到 localhost。有关配置 Spring Data Redis 的更多信息,请参阅reference documentation。
Java Servlet 容器初始化
我们的Spring Configuration创建了一个实现Filter
的名为springSessionRepositoryFilter
的 Spring Bean。 springSessionRepositoryFilter
bean 负责用 Spring Session 支持的自定义实现替换HttpSession
。
为了让我们的Filter
发挥其魔力,Spring 需要加载我们的Config
类。最后,我们需要确保我们的 Servlet 容器(即 Tomcat)对每个请求都使用springSessionRepositoryFilter
。幸运的是,Spring Session 提供了一个名为AbstractHttpSessionApplicationInitializer
的 Util 类,这两个步骤都非常容易。您可以在下面找到一个示例:
src/main/java/sample/Initializer.java.
public class Initializer extends AbstractHttpSessionApplicationInitializer { (1)
public Initializer() {
super(Config.class); (2)
}
}
Note
我们的类(Initializer)的名称无关紧要。重要的是我们扩展AbstractHttpSessionApplicationInitializer
。
- (1) 第一步是扩展
AbstractHttpSessionApplicationInitializer
。这可以确保为每个请求向我们的 Servlet 容器注册名称为springSessionRepositoryFilter
的 Spring Bean。 - (2)
AbstractHttpSessionApplicationInitializer
还提供了一种机制,可以轻松确保 Spring 加载我们的Config
。
5.2.2 基于 Redis XML 的配置
本节介绍如何使用 Redis 通过基于 XML 的配置来备份HttpSession
。
Note
HttpSession XML 示例提供了有关如何使用 XML 配置集成 Spring Session 和HttpSession
的工作示例。您可以阅读下面的集成基本步骤,但是建议您在与自己的应用程序集成时遵循详细的 HttpSession XML 指南。
Spring XML 配置
添加所需的依赖关系之后,我们可以创建我们的 Spring 配置。 Spring 配置负责创建一个 Servlet 过滤器,该过滤器将HttpSession
实现替换为 Spring Session 支持的实现。添加以下 Spring 配置:
src/main/webapp/WEB-INF/spring/session.xml.
(1)
<context:annotation-config/>
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>
(2)
<bean class="org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory"/>
- (1) 我们使用
<context:annotation-config/>
和RedisHttpSessionConfiguration
的组合,因为 Spring Session 尚未提供 XML 命名空间支持(请参阅gh-104)。这将创建一个名称为springSessionRepositoryFilter
的 Spring Bean,它实现了 Filter。过滤器负责替换由 Spring Session 支持的HttpSession
实现。在这种情况下,Spring Session 由 Redis 支持。 - (2) 我们创建一个
RedisConnectionFactory
,将 Spring Session 连接到 Redis Server。我们将连接配置为在默认端口(6379)上连接到 localhost。有关配置 Spring Data Redis 的更多信息,请参阅reference documentation。
XML Servlet 容器初始化
我们的Spring Configuration创建了一个实现Filter
的名为springSessionRepositoryFilter
的 Spring Bean。 springSessionRepositoryFilter
bean 负责用 Spring Session 支持的自定义实现替换HttpSession
。
为了使Filter
发挥其魔力,我们需要指示 Spring 加载session.xml
配置。我们使用以下配置进行此操作:
src/main/webapp/WEB-INF/web.xml.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/*.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
ContextLoaderListener读取 contextConfigLocation 并选择我们的 session.xml 配置。
最后,我们需要确保我们的 Servlet 容器(即 Tomcat)对每个请求都使用springSessionRepositoryFilter
。以下代码段为我们执行了最后一步:
src/main/webapp/WEB-INF/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>
DelegatingFilterProxy将查找名称为springSessionRepositoryFilter
的 Bean 并将其转换为Filter
。对于每个调用DelegatingFilterProxy
的请求,都将调用springSessionRepositoryFilter
。
5.3 使用 JDBC 的 HttpSession
通过在使用HttpSession
的任何内容之前添加一个 Servlet 过滤器来启用将 Spring Session 与HttpSession
一起使用。您可以使用以下任一方法来启用此功能:
5.3.1 基于 JDBC Java 的配置
本节描述如何使用关系数据库通过基于 Java 的配置来支持HttpSession
。
Note
HttpSession JDBC 示例提供了有关如何使用 Java 配置集成 Spring Session 和HttpSession
的工作示例。您可以阅读下面的集成基本步骤,但是在与自己的应用程序集成时,建议您遵循详细的 HttpSession JDBC 指南。
Spring Java 配置
添加所需的依赖关系之后,我们可以创建我们的 Spring 配置。 Spring 配置负责创建一个 Servlet 过滤器,该过滤器将HttpSession
实现替换为 Spring Session 支持的实现。添加以下 Spring 配置:
@EnableJdbcHttpSession (1)
public class Config {
@Bean
public EmbeddedDatabase dataSource() {
return new EmbeddedDatabaseBuilder() (2)
.setType(EmbeddedDatabaseType.H2)
.addScript("org/springframework/session/jdbc/schema-h2.sql").build();
}
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource); (3)
}
}
- (1)
@EnableJdbcHttpSession
Comments 创建一个名称为springSessionRepositoryFilter
的 Spring Bean,用于实现 Filter。过滤器负责替换由 Spring Session 支持的HttpSession
实现。在这种情况下,Spring Session 由关系数据库支持。 - (2) 我们创建一个
dataSource
,该dataSource
将 Spring Session 连接到 H2 数据库的嵌入式实例。我们将 H2 数据库配置为使用 Spring Session 中包含的 SQL 脚本创建数据库表。 - (3) 我们创建一个
transactionManager
来 Management 先前配置的dataSource
的 Transaction。
有关如何配置与数据访问相关的问题的更多信息,请参阅Spring 框架参考文档。
Java Servlet 容器初始化
我们的Spring Configuration创建了一个实现Filter
的名为springSessionRepositoryFilter
的 Spring Bean。 springSessionRepositoryFilter
bean 负责用 Spring Session 支持的自定义实现替换HttpSession
。
为了让我们的Filter
发挥其魔力,Spring 需要加载我们的Config
类。最后,我们需要确保我们的 Servlet 容器(即 Tomcat)对每个请求都使用springSessionRepositoryFilter
。幸运的是,Spring Session 提供了一个名为AbstractHttpSessionApplicationInitializer
的 Util 类,这两个步骤都非常容易。您可以在下面找到一个示例:
src/main/java/sample/Initializer.java.
public class Initializer extends AbstractHttpSessionApplicationInitializer { (1)
public Initializer() {
super(Config.class); (2)
}
}
Note
我们的类(Initializer)的名称无关紧要。重要的是我们扩展AbstractHttpSessionApplicationInitializer
。
- (1) 第一步是扩展
AbstractHttpSessionApplicationInitializer
。这可以确保为每个请求向我们的 Servlet 容器注册名称为springSessionRepositoryFilter
的 Spring Bean。 - (2)
AbstractHttpSessionApplicationInitializer
还提供了一种机制,可以轻松确保 Spring 加载我们的Config
。
5.3.2 基于 JDBC XML 的配置
本节介绍如何使用关系数据库通过基于 XML 的配置来支持HttpSession
。
Note
HttpSession JDBC XML 示例提供了有关如何使用 XML 配置集成 Spring Session 和HttpSession
的工作示例。您可以阅读下面的集成基本步骤,但是在与自己的应用程序集成时,建议您遵循详细的 HttpSession JDBC XML 指南。
Spring XML 配置
添加所需的依赖关系之后,我们可以创建我们的 Spring 配置。 Spring 配置负责创建一个 Servlet 过滤器,该过滤器将HttpSession
实现替换为 Spring Session 支持的实现。添加以下 Spring 配置:
src/main/webapp/WEB-INF/spring/session.xml.
(1)
<context:annotation-config/>
<bean class="org.springframework.session.jdbc.config.annotation.web.http.JdbcHttpSessionConfiguration"/>
(2)
<jdbc:embedded-database id="dataSource" database-name="testdb" type="H2">
<jdbc:script location="classpath:org/springframework/session/jdbc/schema-h2.sql"/>
</jdbc:embedded-database>
(3)
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg ref="dataSource"/>
</bean>
- (1) 我们使用
<context:annotation-config/>
和JdbcHttpSessionConfiguration
的组合,因为 Spring Session 尚未提供 XML 命名空间支持(请参阅gh-104)。这将创建一个名称为springSessionRepositoryFilter
的 Spring Bean,它实现了 Filter。过滤器负责替换由 Spring Session 支持的HttpSession
实现。在这种情况下,Spring Session 由关系数据库支持。 - (2) 我们创建一个
dataSource
,该dataSource
将 Spring Session 连接到 H2 数据库的嵌入式实例。我们将 H2 数据库配置为使用 Spring Session 中包含的 SQL 脚本创建数据库表。 - (3) 我们创建一个
transactionManager
来 Management 先前配置的dataSource
的 Transaction。
有关如何配置与数据访问相关的问题的更多信息,请参阅Spring 框架参考文档。
XML Servlet 容器初始化
我们的Spring Configuration创建了一个实现Filter
的名为springSessionRepositoryFilter
的 Spring Bean。 springSessionRepositoryFilter
bean 负责用 Spring Session 支持的自定义实现替换HttpSession
。
为了使Filter
发挥其魔力,我们需要指示 Spring 加载session.xml
配置。我们使用以下配置进行此操作:
src/main/webapp/WEB-INF/web.xml.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/*.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
ContextLoaderListener读取 contextConfigLocation 并选择我们的 session.xml 配置。
最后,我们需要确保我们的 Servlet 容器(即 Tomcat)对每个请求都使用springSessionRepositoryFilter
。以下代码段为我们执行了最后一步:
src/main/webapp/WEB-INF/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>
DelegatingFilterProxy将查找名称为springSessionRepositoryFilter
的 Bean 并将其转换为Filter
。对于每个调用DelegatingFilterProxy
的请求,都将调用springSessionRepositoryFilter
。
5.3.3 基于 JDBC Spring Boot 的配置
本节描述了使用 Spring Boot 时如何使用关系数据库来备份HttpSession
。
Note
HttpSession JDBC Spring Boot 示例提供了有关如何使用 Spring Boot 集成 Spring Session 和HttpSession
的工作示例。您可以阅读下面的集成基本步骤,但是在与自己的应用程序集成时,建议您遵循详细的 HttpSession JDBC Spring Boot Guide。
Spring Boot 配置
添加所需的依赖关系后,我们可以创建我们的 Spring Boot 配置。得益于一流的自动配置支持,设置由关系数据库支持的 Spring Session 就像将单个配置属性添加到application.properties
一样简单:
src/main/resources/application.properties.
spring.session.store-type=jdbc # Session store type.
在后台,Spring Boot 将应用等同于手动添加@EnableJdbcHttpSession
Comments 的配置。这将创建一个名称为springSessionRepositoryFilter
的 Spring Bean,它实现了 Filter。过滤器负责替换由 Spring Session 支持的HttpSession
实现。
可以使用application.properties
进行进一步的自定义:
src/main/resources/application.properties.
server.servlet.session.timeout= # Session timeout. If a duration suffix is not specified, seconds will be used.
spring.session.jdbc.initialize-schema=embedded # Database schema initialization mode.
spring.session.jdbc.schema=classpath:org/springframework/session/jdbc/[emailprotected]@[emailprotected]@.sql # Path to the SQL file to use to initialize the database schema.
spring.session.jdbc.table-name=SPRING_SESSION # Name of the database table used to store sessions.
有关更多信息,请参阅 Spring Boot 文档的Spring Session部分。
配置数据源
Spring Boot 自动创建一个DataSource
来将 Spring Session 连接到 H2 数据库的嵌入式实例。在生产环境中,您需要确保更新配置以指向关系数据库。例如,您可以在 application.properties 中包括以下内容
src/main/resources/application.properties.
spring.datasource.url= # JDBC URL of the database.
spring.datasource.username= # Login username of the database.
spring.datasource.password= # Login password of the database.
有关更多信息,请参阅 Spring Boot 文档的配置数据源部分。
Servlet 容器初始化
我们的Spring Boot 配置创建了一个实现Filter
的名为springSessionRepositoryFilter
的 Spring Bean。 springSessionRepositoryFilter
bean 负责用 Spring Session 支持的自定义实现替换HttpSession
。
为了让我们的Filter
发挥其魔力,Spring 需要加载我们的Config
类。最后,我们需要确保我们的 Servlet 容器(即 Tomcat)对每个请求都使用springSessionRepositoryFilter
。幸运的是,Spring Boot 为我们完成了这两个步骤。
带有 Hazelcast 的 5.4 HttpSession
通过在使用HttpSession
的任何内容之前添加一个 Servlet 过滤器来启用将 Spring Session 与HttpSession
一起使用。
本节介绍如何使用 Hazelcast 通过基于 Java 的配置来备份HttpSession
。
Note
榛果 Springsample提供了有关如何使用 Java 配置集成 Spring Session 和HttpSession
的工作示例。您可以阅读下面的集成基本步骤,但是建议您在与自己的应用程序集成时遵循详细的《 Hazelcast Spring 指南》。
5.4.1 Spring 配置
添加所需的依赖关系之后,我们可以创建我们的 Spring 配置。 Spring 配置负责创建一个 Servlet 过滤器,该过滤器将HttpSession
实现替换为 Spring Session 支持的实现。添加以下 Spring 配置:
@EnableHazelcastHttpSession (1)
@Configuration
public class HazelcastHttpSessionConfig {
@Bean
public HazelcastInstance hazelcastInstance() {
MapAttributeConfig attributeConfig = new MapAttributeConfig()
.setName(HazelcastSessionRepository.PRINCIPAL_NAME_ATTRIBUTE)
.setExtractor(PrincipalNameExtractor.class.getName());
Config config = new Config();
config.getMapConfig(HazelcastSessionRepository.DEFAULT_SESSION_MAP_NAME) (2)
.addMapAttributeConfig(attributeConfig)
.addMapIndexConfig(new MapIndexConfig(
HazelcastSessionRepository.PRINCIPAL_NAME_ATTRIBUTE, false));
return Hazelcast.newHazelcastInstance(config); (3)
}
}
- (1)
@EnableHazelcastHttpSession
Comments 创建一个名称为springSessionRepositoryFilter
的 Spring Bean,用于实现 Filter。过滤器负责替换由 Spring Session 支持的HttpSession
实现。在这种情况下,Spring Session 由 Hazelcast 支持。 - (2) 为了支持通过主体名称索引检索会话,需要注册适当的
ValueExtractor
。 Spring Session 为此提供了PrincipalNameExtractor
。 - (3) 我们创建了一个
HazelcastInstance
,用于将 Spring Session 与 Hazelcast 连接起来。默认情况下,Hazelcast 的嵌入式实例是由应用程序启动并连接的。有关配置 Hazelcast 的更多信息,请参阅reference documentation。
5.4.2 Servlet 容器初始化
我们的Spring Configuration创建了一个实现Filter
的名为springSessionRepositoryFilter
的 Spring Bean。 springSessionRepositoryFilter
bean 负责用 Spring Session 支持的自定义实现替换HttpSession
。
为了让我们的Filter
发挥其魔力,Spring 需要加载我们的SessionConfig
类。由于我们的应用程序已经在使用SecurityInitializer
类加载 Spring 配置,因此我们可以简单地将SessionConfig
类添加到其中。
src/main/java/sample/SecurityInitializer.java.
public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer {
public SecurityInitializer() {
super(SecurityConfig.class, SessionConfig.class);
}
}
最后,我们需要确保我们的 Servlet 容器(即 Tomcat)对每个请求都使用springSessionRepositoryFilter
。在 Spring Security 的springSecurityFilterChain
之前调用 Spring Session 的springSessionRepositoryFilter
极为重要。这样可以确保 Spring Security 支持HttpSession
。幸运的是,Spring Session 提供了一个名为AbstractHttpSessionApplicationInitializer
的 Util 类,这使此操作非常容易。您可以在下面找到一个示例:
src/main/java/sample/Initializer.java.
public class Initializer extends AbstractHttpSessionApplicationInitializer {
}
Note
我们的类(Initializer)的名称无关紧要。重要的是我们扩展AbstractHttpSessionApplicationInitializer
。
通过扩展AbstractHttpSessionApplicationInitializer
,我们确保在 Spring Security 的springSecurityFilterChain
之前的每个请求中,将名称springSessionRepositoryFilter
的 Spring Bean 注册到我们的 Servlet 容器中。
5.5 HttpSession 集成如何工作
幸运的是HttpSession
和HttpServletRequest
(用于获取HttpSession
的 API)都是接口。这意味着我们可以为每个这些 API 提供自己的实现。
Note
本节描述 Spring Session 如何提供与HttpSession
的透明集成。目的是使用户可以了解幕后情况。此功能已经集成,您无需自己实现此逻辑。
首先,我们创建一个自定义HttpServletRequest
,它返回HttpSession
的自定义实现。它看起来像以下内容:
public class SessionRepositoryRequestWrapper extends HttpServletRequestWrapper {
public SessionRepositoryRequestWrapper(HttpServletRequest original) {
super(original);
}
public HttpSession getSession() {
return getSession(true);
}
public HttpSession getSession(boolean createNew) {
// create an HttpSession implementation from Spring Session
}
// ... other methods delegate to the original HttpServletRequest ...
}
任何返回HttpSession
的方法都将被覆盖。所有其他方法都由HttpServletRequestWrapper
实现,并仅委托给原始HttpServletRequest
实现。
我们使用名为SessionRepositoryFilter
的 servlet Filter
替换HttpServletRequest
实现。伪代码可以在下面找到:
public class SessionRepositoryFilter implements Filter {
public doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
HttpServletRequest httpRequest = (HttpServletRequest) request;
SessionRepositoryRequestWrapper customRequest =
new SessionRepositoryRequestWrapper(httpRequest);
chain.doFilter(customRequest, response, chain);
}
// ...
}
通过将自定义HttpServletRequest
实现传递到FilterChain
中,我们确保Filter
之后调用的所有内容都使用自定义HttpSession
实现。这突出了为什么必须将 Spring Session 的SessionRepositoryFilter
放置在与HttpSession
进行交互的任何内容之前很重要。
5.6 HttpSession 和 RESTful API
通过允许在 Headers 中提供会话,Spring Session 可以与 RESTful API 一起使用。
Note
REST Sample提供了有关如何在 REST 应用程序中使用 Spring Session 来支持 Headers 身份验证的工作示例。您可以按照以下集成的基本步骤进行操作,但是在与自己的应用程序集成时,建议您遵循详细的 REST 指南。
5.6.1 Spring 配置
添加所需的依赖关系之后,我们可以创建我们的 Spring 配置。 Spring 配置负责创建一个 Servlet 过滤器,该过滤器将HttpSession
实现替换为 Spring Session 支持的实现。添加以下 Spring 配置:
@Configuration
@EnableRedisHttpSession (1)
public class HttpSessionConfig {
@Bean
public LettuceConnectionFactory connectionFactory() {
return new LettuceConnectionFactory(); (2)
}
@Bean
public HttpSessionIdResolver httpSessionIdResolver() {
return HeaderHttpSessionIdResolver.xAuthToken(); (3)
}
}
- (1)
@EnableRedisHttpSession
Comments 创建一个名称为springSessionRepositoryFilter
的 Spring Bean,实现Filter
。过滤器负责替换由 Spring Session 支持的HttpSession
实现。在这种情况下,Spring Session 由 Redis 支持。 - (2) 我们创建一个
RedisConnectionFactory
,将 Spring Session 连接到 Redis Server。我们将连接配置为在默认端口(6379)上连接到 localhost。有关配置 Spring Data Redis 的更多信息,请参阅reference documentation。 - (3) 我们自定义了 Spring Session 的 HttpSession 集成,以使用 HTTP Headers 来传达当前会话信息,而不是 cookie。
5.6.2 Servlet 容器初始化
我们的Spring Configuration创建了一个实现Filter
的名为springSessionRepositoryFilter
的 Spring Bean。 springSessionRepositoryFilter
bean 负责用 Spring Session 支持的自定义实现替换HttpSession
。
为了让我们的Filter
发挥其魔力,Spring 需要加载我们的Config
类。我们在 Spring MvcInitializer
中提供配置,如下所示:
src/main/java/sample/mvc/MvcInitializer.java.
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { SecurityConfig.class, HttpSessionConfig.class };
}
最后,我们需要确保我们的 Servlet 容器(即 Tomcat)对每个请求都使用springSessionRepositoryFilter
。幸运的是,Spring Session 提供了一个名为AbstractHttpSessionApplicationInitializer
的 Util 类,这使得此操作非常容易。只需使用默认构造函数扩展该类,如下所示:
src/main/java/sample/Initializer.java.
public class Initializer extends AbstractHttpSessionApplicationInitializer {
}
Note
我们的类(Initializer)的名称无关紧要。重要的是我们扩展AbstractHttpSessionApplicationInitializer
。
5.7 HttpSessionListener
Spring Session pass 语句SessionEventHttpSessionListenerAdapter
将SessionDestroyedEvent
和SessionCreatedEvent
转换为HttpSessionEvent
来支持HttpSessionListener
。要使用此支持,您需要:
确保您的
SessionRepository
实现支持并配置为触发SessionDestroyedEvent
和SessionCreatedEvent
。将
SessionEventHttpSessionListenerAdapter
配置为 Spring bean。将每个
HttpSessionListener
注入SessionEventHttpSessionListenerAdapter
如果您使用的是带有 Redis 的 HttpSession中记录的配置支持,则只需将每个HttpSessionListener
注册为 Bean。例如,假设您要支持 Spring Security 的并发控制,并且需要使用HttpSessionEventPublisher
,则只需将HttpSessionEventPublisher
添加为 bean。在 Java 配置中,这可能类似于:
@Configuration
@EnableRedisHttpSession
public class RedisHttpSessionConfig {
@Bean
public HttpSessionEventPublisher httpSessionEventPublisher() {
return new HttpSessionEventPublisher();
}
// ...
}
在 XML 配置中,这可能类似于:
<bean class="org.springframework.security.web.session.HttpSessionEventPublisher"/>