Spring Boot使用MongoDB实现共享Session
Spring BootMongoDBSession大约 3298 字添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-mongodb</artifactId>
</dependency>
开启MongoSession
使用EnableMongoHttpSession
注解开启MongoDB
共享session
@Configuration
@EnableMongoHttpSession
public class HttpSessionConfig {
}
默认保存在名称为sessions
的集合中,过期时间为1800秒,可配置:
@EnableMongoHttpSession(maxInactiveIntervalInSeconds = 1200, collectionName = "mongo_session")
测试Session
@RestController
@SpringBootApplication
@EnableMongoHttpSession
//@EnableMongoHttpSession(maxInactiveIntervalInSeconds = 60, collectionName = "mongo_session")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@PostMapping("/login")
public String login(HttpSession session) {
session.setAttribute("testKey", "testValue");
return "login success";
}
@PostMapping("/logout")
public String logout(HttpSession session) {
session.invalidate();
return "logout success";
}
@GetMapping("/attr")
public String attr(HttpSession session) {
Object testKey = session.getAttribute("testKey");
return testKey == null ? "null" : ((String) testKey);
}
}
序列化Session
默认使用JdkMongoSessionConverter
:标准Java
序列化将session
属性映射以二进制形式持久化到MongoDB
。
@Configuration
@EnableMongoHttpSession
public class HttpSessionConfig {
@Bean
public JdkMongoSessionConverter jdkMongoSessionConverter() {
return new JdkMongoSessionConverter(Duration.ofMinutes(30));
}
}
保存至数据库后的记录如下:
{
"_id" : "690aeece-0c27-4b56-82fb-42df46259cf7",
"created" : ISODate("2020-05-13T06:18:26.212Z"),
"accessed" : ISODate("2020-05-13T06:18:30.991Z"),
"interval" : "PT30M",
"principal" : null,
"expireAt" : ISODate("2020-05-13T06:48:30.991Z"),
"attr" : { "$binary" : "rO0ABXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAAHdGVzdEtleXQACXRlc3RWYWx1ZXg=", "$type" : "00" }
}
可使用JacksonMongoSessionConverter
:使用Jackson
序列化session
属性到MongoDB
。
重要提醒:集成了
Spring Security
的项目,这个转换器将注册白名单组件保证Spring Security
正常运行。
@Configuration
@EnableMongoHttpSession
public class HttpSessionConfig {
@Bean
JacksonMongoSessionConverter mongoSessionConverter() {
return new JacksonMongoSessionConverter();
}
}
保存至数据库后的记录如下:
{
"_id" : "03533d5b-eb11-475d-82c0-c927f84fd64d",
"@class" : "org.springframework.session.data.mongo.MongoSession",
"intervalSeconds" : 1800,
"originalSessionId" : "03533d5b-eb11-475d-82c0-c927f84fd64d",
"createdMillis" : NumberLong(1589351032853),
"accessedMillis" : NumberLong(1589351032853),
"expireAt" : ISODate("2020-05-13T06:53:52.853Z"),
"attrs" : {
"@class" : "java.util.HashMap",
"testKey" : "testValue"
},
"principal" : null
}
代码
https://github.com/fendoudebb/learning/tree/master/java/learn-spring-boot/mongo-session
参考
https://docs.spring.io/spring-session-data-mongodb/docs/2.1.1.RELEASE/reference/htmlsingle
https://docs.spring.io/spring-session-data-mongodb/docs/current
阅读 666 · 发布于 2020-05-14
————        END        ————
扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看换一批
- Linux CentOS内核版本2.6升级为4.4阅读 1195
- 移动端input输入框使软键盘回车键变为搜索按钮阅读 1489
- java.sql.SQLDataException: ORA-01861: literal does not match format string阅读 1087
- GoLand提示Receiver has generic name阅读 23
- Android WindowManager背景暗化阅读 1226
- 设计模式之解释器模式阅读 377
- Linux之CentOS gcc版本升级为4.8.2方法阅读 494
- 微信小程序渲染富文本HTML标签阅读 650
- PHP判断函数、类、方法、属性、数组中的key是否存在阅读 960
- SQL注入和XSS攻击阅读 405