文章目录
引言
在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