前言:我们知道,在单体项目中,我们将用户信息存在 session 中,那么在该 session 过期之前,我们都可以从 session 中获取到用户信息,通过登录拦截,进行操作
但是分布式部署的时候,我们请求的服务器可能不是同一台服务器,那么我们就必须要面对 session 共享的问题,下面介绍的是在 SpringBoot 实现 session 共享的方式
一、创建项目
<!-- redis的依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- web的依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- session共享的依赖 --> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
二、配置 Redis
我们需要借助 redis 实现 session 共享,所以我们需要在配置文件中配置 redis 的信息
server: port: 8080 spring: redis: host: 127.0.0.1 port: 6379 database: 0 password:
我们配置了该项目的端口,以及 redis 的连接信息
三、写接口
package com.zyxx.session.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpSession; @RestController public class DemoController {
/ * 获取项目端口 */ @Value("${server.port}") private String port; / * 将信息存放在session中 */ @GetMapping("set") public String set(HttpSession session) {
session.setAttribute("user", "hello world~~~"); return port; } / * 从session中获取信息 */ @GetMapping("get") public String get(HttpSession session) {
return session.getAttribute("user") + " : " + port; } }
我们写了一个 set,一个 get 方法,将信息存放在 session 中,从 session 中取出信息
四、打包测试

启动项目,分别启动在两个端口:
java -jar .\session-0.0.1-SNAPSHOT.jar --server.port=8080 java -jar .\session-0.0.1-SNAPSHOT.jar --server.port=8081
分别启动在 8080,8081端口
由此证明,我们的 session 共享已经成功
五、分布式部署
下面我们借助 nginx 代理转发访问这两个项目
1、配置转发
upstream helloworld{
server 127.0.0.1:8080 weight=1; server 127.0.0.1:8081 weight=2; }
这里配置转发到 8080,8081 端口,并配置了权重
location / {
proxy_pass http://helloworld;
#root html; #index index.html index.htm; }
拦截本地的所有请求,默认端口为 80
2、启动 nginx
nginx -s reload
3、访问测试
http://localhost/set

这里我们可以看出,由 8080 端口的服务器完成了 set 请求,多次访问,nginx 将会根据什么配置的权重参数分配服务器来完成操作
下面我们访问:
http://localhost/get

可以看出,由 8081 端口的服务器完成了 get 请求,并成功取到了存在 session 中的数据,实现了 session 共享
六、总结
如您在阅读中发现不足,欢迎留言!!!
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201984.html原文链接:https://javaforall.net
