聊聊 Spring Session的实现

本文探讨了在Web项目中如何处理Http无状态性带来的会话管理问题,特别是集群环境下。Spring Session框架结合Redis提供了解决方案。通过分析`@EnableRedisHttpSession`、`RedisHttpSessionConfiguration`和`SessionRepositoryFilter`,揭示了Spring Session在集群中的Session共享机制。文章还介绍了Spring Session的使用步骤和核心流程,并强调了在过滤器中包装HttpServletRequest的重要性以及设计模式的应用。
摘要由CSDN通过智能技术生成

引言

在Web项目由于Http的无状态性,如何存储用户的会话信息是一个普遍的问题,在传统的单体项目中用户会话信息Session存储在系统内存中,也就是堆内存的Map中。随着前后端分离和微服务的架构遍地开花,传统的Session-Cookie方案已不能满足项目的要求。因为项目集群化以后,不能在每台服务器上单独管理会话,需要一个集中管理的方式。通俗的说就是如何在集群环境中实现Session共享

Spring总是为开发者着想,所以为了解决上面的问题,开发了一个名为Spring Session的框架结合其对Redis的实现可以完美的解决问题。

[!Spring Session官方文档]https://docs.spring.io/spring-session/reference/

使用

Spring Boot版本 2.5.6

pom文件

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.5.6</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>2.5.6</version>
</dependency>

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
    <version>2.4.6</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.5.6</version>
</dependency>

application配置文件

spring:
  redis:
    port: 16379
    database: 1 #Redis相关配置

启动类

@SpringBootApplication
@EnableRedisHttpSession //开启以Redis作为基础存储设施的HttpSession功能
public class SessionApplication {
    public static void main(String[] args) {
        SpringApplication.run(SessionApplication.class,args);
    }
}

测试

@RestController
@RequestMapping("/session")
public class SessionController {

    @GetMapping("/set")
    public void session(HttpServletRequest request,String name) {
        request.getSession().setAttribute("name",name);
    }

    @GetMapping("/current")
    public String getNam
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值