本指南介绍如何使用Spring Session透明地利用Redis来通过Java配置来回退Web应用程序的HttpSession。
完成的指南可以在httpsession sample application中找到。
Updating Dependencies
在使用Spring Session之前,必须确保更新依赖项。 如果您使用Maven,请确保添加以下依赖项:
pom.xml
|
|
Spring Java Configuration
添加所需的依赖项后,我们可以创建我们的Spring配置。 Spring配置负责创建一个Servlet过滤器,它用Spring Session支持的实现替换HttpSession实现。 添加以下Spring配置:
|
|
@EnableRedisHttpSession注释创建一个名为springSessionRepositoryFilter的Spring Bean,它实现了Filter。 过滤器是负责替换HttpSession实现由Spring Session支持。 在这个例子中,Spring Session由Redis支持。
我们创建一个RedisConnectionFactory,将Spring Session连接到Redis服务器。 我们配置连接以连接到默认端口(6379)上的localhost有关配置Spring Data Redis的更多信息,请参考reference documentation。
Java Servlet容器初始化
我们的 Spring Configuration 创建了一个Spring Bean,名为springSessionRepositoryFilter,它实现了Filter。 springSessionRepositoryFilter bean负责用Spring Session支持的自定义实现替换HttpSession。
为了使我们的Filter能够做到这一点,Spring需要加载我们的Config类。 最后,我们需要确保我们的Servlet容器(即Tomcat)对于每个请求使用我们的springSessionRepositoryFilter。 幸运的是,Spring Session提供了一个名为AbstractHttpSessionApplicationInitializer的实用程序类,这两个步骤都非常容易。 你可以找到一个例子:
src/main/java/sample/Initializer.java
|
|
我们的类的名字(Initializer)没关系。 重要的是我们扩展AbstractHttpSessionApplicationInitializer。
第一步是扩展AbstractHttpSessionApplicationInitializer。 这确保Spring Bean的名称为springSessionRepositoryFilter,为每个请求的Servlet容器注册。AbstractHttpSessionApplicationInitializer还提供了一种机制,以轻松确保Spring加载我们的Config。
httpsession示例应用程序
运行httpsession示例应用程序
您可以通过获取 source code并调用以下命令来运行示例:
要使样本工作,必须在localhost上安装install Redis 2.8+,并使用默认端口(6379)运行它。 或者,您可以更新LettuceConnectionFactory以指向Redis服务器。
|
|
您现在应该可以访问http://localhost:8080/
探索httpsession示例应用程序
尝试使用应用程序。 使用以下信息填写表单:
Attribute Name:username
Attribute Value:rob
现在单击Set Attribute按钮。 现在应该可以看到表中显示的值。
How does it work?
我们在SessionServlet中与标准HttpSession进行交互,如下所示:
src/main/java/sample/SessionServlet.java
|
|
而不是使用Tomcat的HttpSession,我们实际上是在Redis中保留值。 Spring会在您的浏览器中创建一个名为SESSION的cookie,其中包含会话的ID。 继续并查看Cookie(点击获取Chrome或Firefox的帮助)。
如果你喜欢,你可以很容易地删除会话使用redis-cli。 例如,在基于Linux的系统上,您可以输入:
|
|
Redis文档中有关于installing redis-cli的说明。
或者,你也可以删除显式键。 在终端输入以下内容,确保用你的SESSION cookie的值替换7e8383a4-082c-4ffe-a4bc-c40fd3363c5e:
|
|
现在访问http://localhost:8080/ 的应用程序,并观察我们添加的属性不再显示。
注:翻译自http://docs.spring.io/spring-session/docs/current/reference/html5/guides/httpsession.html
