最新稳定版请使用Spring Session 3.5.3spring-doc.cadn.net.cn

Spring Session - MongoDB 仓库

本指南介绍了如何使用MongoDB支持的Spring Session。spring-doc.cadn.net.cn

完成的指南可在mongo样本申请中找到

更新依赖关系

在使用 Spring Session MongoDB 之前,您必须确保更新依赖。 我们假设你使用的是一个正常运行的 Spring Boot 网页应用。 如果你使用 Maven,务必添加以下依赖关系:spring-doc.cadn.net.cn

pom.xml
<dependencies>
	<!-- ... -->
	<dependency>
		<groupId>org.springframework.session</groupId>
		<artifactId>spring-session-data-mongodb</artifactId>
	</dependency>
</dependencies>

Spring配置

添加所需的依赖后,我们可以创建 Spring 配置。 Spring配置负责创建一个ServletFilter,以替换HttpSession实现时,Spring Session支持的实现。spring-doc.cadn.net.cn

你只需添加以下Spring配置:spring-doc.cadn.net.cn

@Configuration(proxyBeanMethods = false)
@EnableMongoHttpSession (1)
public class HttpSessionConfig {

	@Bean
	public JdkMongoSessionConverter jdkMongoSessionConverter() {
		return new JdkMongoSessionConverter(Duration.ofMinutes(30)); (2)
	}

}
1 @EnableMongoHttpSession注释生成一个名为springSessionRepositoryFilter该系统实现了过滤功能。 这个过滤器取代了默认的HttpSession使用MongoDB支持的豆子。
2 将会话超时设置为30分钟。

配置 MongoDB 连接

Spring Boot会自动生成Mongo客户端该系统将 Spring Session 连接到 localhost 上的 MongoDB 服务器,端口为 27017(默认端口)。 在生产环境中,你需要确保更新配置以指向你的 MongoDB 服务器。 例如,你可以在 application.properties 中包含以下内容spring-doc.cadn.net.cn

src/main/resources/application.properties
spring.data.mongodb.host=mongo-srv
spring.data.mongodb.port=27018
spring.data.mongodb.database=prod

更多信息请参阅 Spring Boot 文档中的“连接 MongoDB” 部分。spring-doc.cadn.net.cn

Servlet 容器初始化

我们的Spring配置创建了一个名为springSessionRepositoryFilter实现Filter. 这springSessionRepositoryFilterBean负责替换HttpSession并采用由 Spring Session 支持的自定义实现。spring-doc.cadn.net.cn

为了我们的Filter要施展它的魔力,Spring需要加载我们的配置类。 最后,我们需要确保我们的Servlet容器(即Tomcat)使用我们的springSessionRepositoryFilter每一个请求。 幸运的是,Spring Boot 帮我们解决了这两个步骤。spring-doc.cadn.net.cn

MongoDB 示例应用

MongoDB 示例应用演示了如何利用 Spring Session 透明地利用 MongoDB 来支持一个网页应用HttpSession使用Spring Boot时。spring-doc.cadn.net.cn

运行MongoDB示例应用

您可以通过获取源代码并调用以下命令来运行示例:spring-doc.cadn.net.cn

$ ./gradlew :samples:mongo:bootRun

你现在应该可以在localhost:8080/访问该应用了spring-doc.cadn.net.cn

探索安全示例应用

试试用这个应用。请输入以下方式登录:spring-doc.cadn.net.cn

现在点击登录按钮。 你现在应该会看到一条消息,表示你已经登录了之前输入的用户。 用户信息存储在 MongoDB 中,而非 Tomcat 的HttpSession实现。spring-doc.cadn.net.cn

它是如何运作的?

而不是用Tomcat的HttpSession,我们实际上是在Mongo中保持这些值。 Spring Session取代了HttpSession实现得到了Mongo的支持。 当春季安全SecurityContextPersistenceFilter节省安全上下文前往HttpSession然后它会持续存在到Mongo。spring-doc.cadn.net.cn

当新的HttpSession创建时,Spring Session 会在您的浏览器中创建一个名为 SESSION 的 Cookie,其中包含会话的 ID。 请查看这些Cookie(点击获取Chrome或Firefox帮助)。spring-doc.cadn.net.cn

如果你愿意,可以用mongo客户端轻松检查会话。例如,在基于Linux的系统中,你可以输入:spring-doc.cadn.net.cn

示例应用使用一个嵌入式 MongoDB 实例,监听随机分配的端口。 嵌入式 MongoDB 使用的端口以及连接的精确命令会在应用启动时被记录。spring-doc.cadn.net.cn

$ mongo --port ...
> use test
> db.sessions.find().pretty()

或者,你也可以删除显式密钥。在终端输入以下信息,确保更换60F17293-839b-477c-bb92-07a9c3658843以您的SESSION cookie值表示:spring-doc.cadn.net.cn

> db.sessions.remove({"_id":"60f17293-839b-477c-bb92-07a9c3658843"})

现在访问 localhost:8080/ 的应用程序,发现我们不再认证。spring-doc.cadn.net.cn