Spring Session MongoDB管理会话

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: Spring Session MongoDB管理会话

1.Spring Session MongoDB

1.1 什么是 Spring Session MongoDB

Spring Session MongoDB 是 Spring Session 的二级项目。其功能与 Spring Session 是相同的。Spring Session MongoDB 提供了一个 API 和实现,用于通过利用 Spring Data MongoDB 来管理存储在 MongoDB 中的用户会话信息。


1.2.他与 Spring Session 的区别

Spring Session 与 Spring Session MongoDB 的作用是相同的。都是来解决 Session 共享问题。不同的是 Spring Session 默认的是依赖于 Redis 作为数据缓存平台,而 Spring Session MongoDB 是依赖于 MongoDB 来作为数据缓存平台的。


1.3 安装 MongoDB

1.下载 MongoDB

mongodb-linux-x86_64-4.0.9.tgz

2.解压 tgz 文件

[root@localhost temp]# tar -zxf mongodb-linux-x86_64-4.0.9.tgz

3.创建数据库目录

[root@localhost etc]# mkdir -p data/db

4.创建日志文件

[root@localhost etc]# touch mongodb.log

5.创建配置文件

[root@localhost etc]# vim mongodb.conf

6.启动 MongoDB

[root@localhost bin]# ./mongod --cofnig /usr/local/mongodb/etc/mongodb.conf

7.创建 dqcgm库

> use dqcgm

2.搭建案例环境

2.1 技术版本

JDK:1.8

Spring Boot:2.1.6RELEASE

Spring Session MongoDB:Bean-SR3

2.2 创建项目

2021011716494468.jpg


2.3 修改 POM 文件添加依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.dqcgm</groupId>
  <artifactId>session_mongodb</artifactId>
  <packaging>pom</packaging>
  <version>1.0-SNAPSHOT</version>
  <modules>
    <module>session_mongo1</module>
    <module>session_mongo2</module>
  </modules>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.6.RELEASE</version>
  </parent>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-bom</artifactId>
        <version>Bean-SR3</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <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>
  </dependencies>
</project>

2.4 添加配置文件

Session_monog1

#配置服务的端口
server:
  port: 8080
#配置 MongoDB 的链接信息
spring:
  data:
    mongodb:
      host: 192.168.70.156
      port: 27017
      database: dqcgm
    session:
      store-type: mongodb

Session_mongo2

#配置服务的端口
server:
  port: 8081
#配置 MongoDB 的链接信息
spring:
  data:
    mongodb:
      host: 192.168.70.156
      port: 27017
      database: dqcgm
    session:
      store-type: mongodb

2.5 创建启动类

@SpringBootApplication
@EnableMongoHttpSession
public class Mongo1Application {
  public static void main(String[] args){
    SpringApplication.run(Mongo1Application.class,args);
  }
}

Session_mongo2

@SpringBootApplication
@EnableMongoHttpSession
public class Mongo2Application {
  public static void main(String[] args){
    SpringApplication.run(Mongo2Application.class,args);
  }
}

3.编写测试代码

3.1 Session_mongo1

@RestController
@RequestMapping("/service1")
public class WebController {
  //将数据存放到 HttpSession 中
  @RequestMapping("/setMsg")
  public String getMsg(HttpSession session,String msg){
    session.setAttribute("msg",msg);
    return "ok";
  }
}

3.2 Session_mongo2

@RestController
@RequestMapping("/service2")
public class WebController {
  //获取 HttpSession 中的数据
  @RequestMapping("/getMsg")
  public String getMsg(HttpSession session){
    String msg = (String) session.getAttribute("msg");
    return msg;
  }
}

3.3 修改 MongoDB 的配置文件添加 bind_ip

dbpath=/usr/local/mongodb/data/db
logpath=/usr/local/mongodb/log/mongodb.log
port=27017
fork=true
bind_ip=0.0.0.0

3.4 测试

20210117164954424.jpg


4.共享自定义对象

4.1 创建 Users 类

public class Users implements Serializable {
  private String username;
  private String userpwd;
  public String getUsername() {
    return username;
  }
  public String getUserpwd() {
    return userpwd;
  }
  public void setUsername(String username) {
    this.username = username;
  }
  public void setUserpwd(String userpwd) {
    this.userpwd = userpwd;
  }
}

4.2 session_mongo1

@RestController
@RequestMapping("/service1")
public class WebController {
  //将数据存放到 HttpSession 中
  @RequestMapping("/setMsg")
  public String getMsg(HttpSession session,String msg){
    session.setAttribute("msg",msg);
    return "ok";
  }
  //获取数据封装 Users
  @RequestMapping("/setUsers")
  public String setUsers(HttpSession session, Users users){
    session.setAttribute("users",users);
    return "ok";
  }
}

4.3 session_mongo2

@RestController
@RequestMapping("/service2")
public class WebController {
  //获取 HttpSession 中的数据
  @RequestMapping("/getMsg")
  public String getMsg(HttpSession session){
    String msg = (String) session.getAttribute("msg");
    return msg;
  }
  //从 HttpSession 中获取 Users
  @RequestMapping("/getUsers")
  public Users getUsers(HttpSession session){
    Users users = (Users) session.getAttribute("users");
    return users;
  }
}

4.4 测试

2021011716500997.jpg


5.Spring Session MongoDB 的存结构

{ "_id" : "fe3f6cea-c3e2-426b-a47a-cf21c5b848cb", 
"created" : ISODate("2019-07-12T12:46:48.916Z"), 
"accessed" : ISODate("2019-07-12T12:46:48.919Z"), 
"interval" : "PT30M", 
"principal" : null, 
"expireAt" : ISODate("2019-07-12T13:16:48.919Z"), 
"attr" : BinData(0,"rO0ABXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9h ZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAAFdXNlcnN zcgAcY29tLmJqc3h0Lm1vbmdvLmRvbWFpbi5Vc2Vyc5EM02IkljhzAgACTAAIdXNlcm5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAd1c2VycHdkcQB+AAR4cHQABWFkbWludAAF YWRtaW54") }

6.设置 Session 失效时间

@SpringBootApplication
@EnableMongoHttpSession(maxInactiveIntervalInSeconds=10)
public class Mongo1Application {
  public static void main(String[] args){
    SpringApplication.run(Mongo1Application.class,args);
  }
}


7.@EnableMongoHttpSession 注解讲解

maxInactiveIntervalInSeconds:设置 Session 失效时间

collectionName:设置 MongoDB 的 Collections 的名称

8.更换 Spring Session MongoDB 的序列化器

Spring Session MongoDB 默认使用的是 JDK 序列化器

8.1 创建配置类添加 Jackson 序列化器

//更换 Spring Session MongoDB 的序列化器
@Configuration
public class SessionMongoConfig {
  @Bean
  JacksonMongoSessionConverter mongoSessionConverter() {
    return new JacksonMongoSessionConverter();
  }
}

8.2 修改实体类,添加@JsonAutoDetect 注解

@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY)
public class Users implements Serializable {
  private String username;
  private String userpwd;
  public String getUsername() {
    return username;
  }
  public String getUserpwd() {
    return userpwd;
  }
  public void setUsername(String username) {
    this.username = username;
  }
  public void setUserpwd(String userpwd) {
    this.userpwd = userpwd;
  }
}

8.3 测试


20210117165200944.jpg


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
2月前
|
存储 NoSQL Java
Spring Session框架
Spring Session 是一个用于在分布式环境中管理会话的框架,旨在解决传统基于 Servlet 容器的会话管理在集群和云环境中的局限性。它通过将用户会话数据存储在外部介质(如数据库或 Redis)中,实现了会话数据的跨服务器共享,提高了应用的可扩展性和性能。Spring Session 提供了无缝集成 Spring 框架的 API,支持会话过期策略、并发控制等功能,使开发者能够轻松实现高可用的会话管理。
Spring Session框架
|
4月前
|
NoSQL Java API
Spring Data MongoDB 使用
Spring Data MongoDB 使用
208 1
|
4月前
|
存储 安全 Java
实现基于Spring Cloud的分布式配置管理
实现基于Spring Cloud的分布式配置管理
|
4月前
|
NoSQL Java MongoDB
Spring Boot与MongoDB的集成应用
Spring Boot与MongoDB的集成应用
|
4月前
|
安全 Java Spring
Spring Boot中的环境配置和管理
Spring Boot中的环境配置和管理
|
4月前
|
存储 NoSQL Java
使用Spring Boot和MongoDB构建NoSQL应用
使用Spring Boot和MongoDB构建NoSQL应用
|
4月前
|
Java 开发工具 git
Spring Cloud中的分布式配置管理
Spring Cloud中的分布式配置管理
|
4月前
|
缓存 监控 Java
Spring Boot中使用Ehcache进行缓存管理
Spring Boot中使用Ehcache进行缓存管理
|
4月前
|
Java 开发工具 数据安全/隐私保护
Spring Cloud中的分布式配置管理最佳实践
Spring Cloud中的分布式配置管理最佳实践
|
2月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。