千家信息网

如何使用SpringBoot2.x整合Spring-Session实现Session共享功能

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要介绍了如何使用SpringBoot2.x整合Spring-Session实现Session共享功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编
千家信息网最后更新 2025年02月01日如何使用SpringBoot2.x整合Spring-Session实现Session共享功能

这篇文章主要介绍了如何使用SpringBoot2.x整合Spring-Session实现Session共享功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

1.前言

发展至今,已经很少还存在单服务的应用架构,不说都使用分布式架构部署, 至少也是多点高可用服务。在多个服务器的情况下,Seession共享就是必须面对的问题了。

解决Session共享问题,大多数人的思路都是比较清晰的, 将需要共享的数据存在某个公共的服务中,如缓存。很多人都采用的Redis,手动将Session存在Redis,需要使用时,再从Redsi中读取数据。毫无疑问,这种方案是可行的,只是在手动操作的工作量确实不少。

LZ在这里采用的Spring-Session来实现。它使用代理过滤器,将Session操作拦截,自动将数据同步到Redis中,以及自动从Redis读取数据。从此,操作分布式的Session就像操作单服务的Session一样,可以为所欲为了。

2.实践

2.1 创建工程

使用idea创建SpringBoot工程, 添加组件Web、Spring Session和Redis。 我这里idea是2019版本,SpringBoot是2.1.6。

pom.xml文件

org.springframework.boot spring-boot-starter-data-redis-reactive org.springframework.boot spring-boot-starter-web org.springframework.session spring-session-data-redis org.springframework.boot spring-boot-starter-test test

2.2 配置Redis

spring: redis: port: 6379 password: xofcO46Fy host: 10.17.153.104server: port: 9090

2.3 测试

代码实现

package com.xiaoqiang.sessionshare.web;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;/** * SessionShareController
* 〈session共享控制器〉 * * @author XiaoQiang * @create 2019-7-6 * @since 1.0.0 */@RestController@RequestMapping(value = "/session")public class SessionShareController { @Value("${server.port}") Integer port; @GetMapping(value = "/set") public String set(HttpSession session){ session.setAttribute("user","wangwq8"); return String.valueOf(port); } @GetMapping(value = "get") public String get(HttpSession session){ return "用户:"+session.getAttribute("user")+",端口:"+port; }}

maven package打包发布到服务器服务器,过程略。

分别使用9090 9091端口启动项目。

nohup java -jar sessionshare-0.0.1-SNAPSHOT.jar --server.port=9090 &

nohup java -jar sessionshare-0.0.1-SNAPSHOT.jar --server.port=9091 &

先访问http://10.17.158.136:9090/session/set,在9090这个服务的session保存用户变量;

然后再访问http://10.17.158.136:9091/session/get,从session中获取得到用户信息。

从上面样例,可以看出session已经实现了共享,只是测试过程是需要手动切换服务。为了更好地模式真实项目环境,为此,我们配置Nginx,来进行测试。

2.4 配置Nginx

在Nginx安装目录conf下,编辑nginx.conf,

upstream tomcatServer { server 10.17.158.136:9092 weight=1; server 10.17.158.136:9091 weight=2; } server { listen 9000; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://tomcatServer; proxy_redirect default; #root html; #index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }

在这里我们只需要配置简单的负载均衡,端口是9000。所有localhost:9000都会按一定策略(这里是按权重分发,配置weight=1一样,随机分发的;nginx默认是轮询策略)分发到上游服务upstream配置的服务上。

配置完成后,启动Nginx;

/apps/test/software/nginx/nginx-1.6.2/sbin/nginx

首先访问http://10.17.158.136:9000/session/set,向seesion中保存数据,从下图中可知9090端口的服务处理了该请求。

然后在访问/get请求,是从9091端口的服务获取得到的用户信息,至此,测试完成。

感谢你能够认真阅读完这篇文章,希望小编分享的"如何使用SpringBoot2.x整合Spring-Session实现Session共享功能"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

服务 配置 数据 端口 用户 篇文章 测试 手动 服务器 功能 整合 信息 分布式 只是 工程 架构 策略 过程 问题 项目 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 武汉计算机网络技术培训 上海招聘软件开发工程师 简要描述软件开发流程 南宁公安局网络安全大队 达梦数据库通过了多大容量的测试 大连大商天狗软件开发待遇 区块链需要服务器 安溪凤城网络技术服务干吗的 服务器pr 网络软件开发学些什么 互联网与科技真的有效吗 易享网络技术有限公司 软件开发培训学校村 学生数据库考勤 云软件开发外包 数据库查询的笔试题 上海工业网络技术信息推荐 昆明无纸化会议系统软件开发 中学网络安全工作领导小组的通知 滨州鼎峰互联网科技有限公司 泰安猿生软件开发有限公司 微信小程序上传数据并更新数据库 软件开发属于哪种应税行为 大连大商天狗软件开发待遇 单位网络安全解决方案 电信网络技术的分类 管理服务器都有哪些功能 seer数据库一般什么时候更新 办公室客服服务器 山东涂游软件开发有限公司
0