ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

【Spring】SpringBoot + SpringSession + Redis 实现Session共享

2021-06-07 02:03:50  阅读:124  来源: 互联网

标签:SpringBoot Spring boot redis session spring Redis data


  本章介绍在SpringBoot项目中,使用 spring-session-data-redis.jar 实现Session共享

  SpringBoot与Redis整合参考:【SpringBoot】SpringBoot 整合Redis

一、使用 spring-session-data-redis

1、搭建SpringBoot Web项目

  引入redis依赖和 spring-session-data-redis 依赖

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.test.redis</groupId>
 8     <artifactId>test-springboot-redis-session</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10 
11     <parent>
12         <groupId>org.springframework.boot</groupId>
13         <artifactId>spring-boot-starter-parent</artifactId>
14         <version>2.2.5.RELEASE</version>
15     </parent>
16 
17     <properties>
18         <maven.compiler.source>8</maven.compiler.source>
19         <maven.compiler.target>8</maven.compiler.target>
20     </properties>
21 
22 
23     <dependencies>
24         <dependency>
25             <groupId>org.springframework.boot</groupId>
26             <artifactId>spring-boot-starter-web</artifactId>
27         </dependency>
28 
29         <!-- SpringBoot整合redis -->
30         <dependency>
31             <groupId>org.springframework.boot</groupId>
32             <artifactId>spring-boot-starter-data-redis</artifactId>
33         </dependency>
34 
35         <dependency>
36             <groupId>org.springframework.session</groupId>
37             <artifactId>spring-session-data-redis</artifactId>
38             <version>2.2.1.RELEASE</version>
39         </dependency>
40 
41 
42         <dependency>
43             <groupId>org.springframework.boot</groupId>
44             <artifactId>spring-boot-starter-test</artifactId>
45             <scope>test</scope>
46         </dependency>
47 
48     </dependencies>
49 
50 </project>

2、配置application.yml文件

 1 # 项目端口
 2 server:
 3   port: 8080
 4 
 5 spring:
 6   redis:
 7     database: 0
 8     timeout: 3000
 9     password: 123456
10     # 单节点模式
11     host: 127.0.0.1
12     port: 6379
View Code

3、编写启动类与controller

  1) Application.java

 1 // @EnableRedisHttpSession 可以加也可以不加,
 2 // RedisHttpSessionConfiguration会被自动导入
 3 @SpringBootApplication
 4 public class Application {
 5 
 6     /**
 7      * spring-session-data-redis Session共享
 8      * @param args
 9      */
10     public static void main(String[] args) {
11         SpringApplication.run(Application.class);
12     }
13 }

  2) HelloController.java

 1 @Controller
 2 public class HelloController {
 3 
 4     @RequestMapping("/hello")
 5     public void hello(HttpServletRequest request, HttpServletResponse response) throws IOException {
 6         String sessionId = request.getSession().getId();
 7         System.out.println("sessionId = " + sessionId);
 8         response.getWriter().println("sessionId = " + sessionId);
 9     }
10 }

4、测试运行

  1) 分别使用8080、8081端口启动项

  2) 使用同一浏览器访问地址 http://localhost:8080/hello、http://localhost:8081/hello

  3) 2个地址的返回值 sessionId 应该是相同的

二、spring-session-data-redis 原理

1、原理图

  

2、分析

  1) SpringBoot项目启动,  spring.factories 引入了 SessionAutoConfiguration , 导致 RedisHttpSessionConfiguration、SpringHttpSessionConfiguration 两个配置类自动导入
   如果是Spring项目,就需要使用注解 @EnableRedisHttpSession 来开启RedisHttpSession

  2) RedisHttpSessionConfiguration 主要是配置了 RedisIndexedSessionRepository Session仓库类

  3) SpringHttpSessionConfiguration 主要是配置了 SessionRepositoryFilter Session仓库过滤器

  4) 通过 SessionRepositoryFilter 过滤器对请求进行拦截, 进行逻辑判断, 将 session 保持到 redis中

 

参考: 

  https://blog.csdn.net/shenchaohao12321/article/details/89473591

  https://blog.csdn.net/qq_27088383/article/details/107767000  

 

标签:SpringBoot,Spring,boot,redis,session,spring,Redis,data
来源: https://www.cnblogs.com/h--d/p/14857088.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有