一篇文章认清Spring-Redis-Session机制

本文探讨了Spring Session如何解决传统Session的共享问题,通过将Session存储在Redis中实现跨应用共享。文章介绍了配置Spring Boot应用使用Redis Session的步骤,并详细解析了涉及的类和接口,包括SessionRepositoryFilter、SessionRepositoryRequestWrapper和SessionRepositoryResponseWrapper的工作原理。
摘要由CSDN通过智能技术生成

1.传统Session与Spring Session对比

传统容器session与应用绑定,保存在应用内存中,与容器形成一对一关系,如果多应用时无法实现session共享,比如session中保存用户信息,Spring Session通过巧妙的方式将session保存到一个公共的区域,支持可配置化方式,实现SessionRepository接口,可将session保存到Redis、Jdbc、Mongo等,图1表示两者的区别

一篇文章认清Spring-Redis-Session机制

 

2. 先看下如何使用

2.1 在pom.xml加入依赖并安装redis服务

   <!--spring-session-core  和 spring-data-redis集成包 用于分布式session管理-->
    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
    </dependency>
    <!-- spring boot redis starter 用于自动装配-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

2.2 在SpringBoot启动类加上自动装配参数

@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60*30)
@SpringBootApplication
public class RedisTestApplication{
   public static void main(String[] args) {
        SpringApplication.run(RedisTestApplication.class, args);
    }
}

2.3 在application.yml上加上redis连接信息

spring:
  redis:
    database: 0
    host: 192.168.1.123
    port: 6379
    password: *******

3. 开始揭密

3.1 对类的继承关系有个了解
SessionRepositoryRequestWrapper 与 SessionRepositoryResponseWrapper 是SessionRepositoryFilter的内部类, SessionRepositoryRequestWrapper 通过继承HttpServletRequestWrapper,采用装饰者模式,来扩展已有功能

HttpServletRequestWrapper中持有一个HttpServletRequest对象,然后实现HttpServletRequest接口的所有方法,所有方法实现中都是调用持有的HttpServletRequest对象的相应的方法。继承HttpServletRequestWrapper 可以对其重写。
SessionRepositoryRequestWrapper继承HttpServletRequestWrapper,在构造方法中将原有的HttpServletRequest通过调用super完成对HttpServletRequestWrapper中持有的HttpServletRequest初始化赋值,然后重写和session相关的方法。这样就保证SessionRepositoryRequestWrapper的其他方法调用都是使用原有的HttpServletRequest的数据,只有session相关的是重写的逻辑。

Request相关类图

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值