springboot实现session共享
目录
应用场景
如何解决
(1)应用场景
session是指多个http请求共享的会话。如果我们后台只有一个服务器,则不存在共享问题,但是在分布式/集群项目中,Session 共享则是一个必须面对的问题,先看一个简单的架构图:
(2)如何解决
思路很简单,就是将各个服务之间需要共享的数据,保存到一个公共的地方
代码实现
此时我们先创建一个新的springboot项目,引入 Web、Spring Session 以及Spring security、Redis:
pom.xml如下
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-test</artifactId><scope>test</scope></dependency></dependencies>
在application.xml里配置redis(保证redis的服务器已经打开)。
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.database=0server.port=8080
创建controller进行测试
@RestController
public class HelloController {@Value("${server.port}")Integer port;@GetMapping("/set")public String set(HttpSession session) {//返回的session就是共享sessionsession.setAttribute("user", "AOLIGEI");return String.valueOf(port);}@GetMapping("/get")public String get(HttpSession session) {//访问共享session的user,并返回该请求所访问服务器的端口号return session.getAttribute("user") + ":" + port;}
}
启动springboot项目,此时我的项目出现了redis的连接异常:
org.springframework.data.redis.RedisConnectionFailureException:Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to 127.0.0.1:6379
出错原因:我的redis版本(2.8.9)太低。
解决方法:将redis密码设置为空即可,重启redis服务器。
重启项目,浏览器里访问localhost:8080/set会自动跳转到spring security登录页,用户名输入user,密码从控制台复制。
访问成功后,我们已经在共享session里存储了user键值对。
查询redis数据库,此时共享session已经存储在redis数据库中了。
然后新开窗口,将此项目在端口号8081再次启动,访问localhost:8081/get,我们发现已经获取到了reidis数据库里共享session里的user,此时请求访问的端口号就是8081。
注意: 有人会问,为什么访问8081地址时不用进行spring security认证,因为spring security就是对session进行认证,8080和8081两者是共享seseion的,所以只需要认证一次。这也说明了我们seseion共享已经实现了。
springboot实现session共享相关推荐
- SpringBoot 实现Session共享
HttpSession,是通过Servlet容器创建并进行管理的,创建成功以后将会保存在内存中,这里将会使用Redis解决session共享的问题. 创建项目 添加pom 添加相关的maven < ...
- SpringBoot 分布式Session共享
一.在分布式开发时Nginx负载均衡时传统做法是 把session手动存到redis中 1.常用做法redis 客户端发起一个请求,这个请求到达nginx上之后被,nginx转发给tomcatA上,然 ...
- 【SpringBoot】18、SpringBoot中使用Session共享实现分布式部署
前言:我们知道,在单体项目中,我们将用户信息存在 session 中,那么在该 session 过期之前,我们都可以从 session 中获取到用户信息,通过登录拦截,进行操作 但是分布式部署的时候, ...
- SpringBoot一个依赖搞定Session共享,没有比这更简单的方案了!
作者:江南一点雨 微信公众号:牧码小子(ID:a_javaboy) 上一篇:推荐10个你不得不关注的NB技术公众号 有的人可能会觉得题目有点夸张,其实不夸张,题目没有使用任何修辞手法!认真读完本文,你 ...
- java分布式会话redis_详解springboot中redis的使用和分布式session共享问题
对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash.轮训.根据权重.随机等.不管对于哪一种负载均衡算法,由于Nginx对不同的请求分发到某一个Tomcat,Tomca ...
- C#session共享+redis_技术干货分享:基于SpringBoot+Redis的Session共享与单点登录
categories: 架构 author: mrzhou tags: SpringBoot redis session 单点登录 基于SpringBoot+Redis的Session共享与单点登录 ...
- Springboot整合Websocket遇到的坑_websocket session不支持序列化,无法存储至redis_Websocket相关问题总结(Session共享,用户多端登录等)
Springboot整合Websocket遇到的坑 一.使用Springboot内嵌的tomcat启动websocket 1.添加ServerEndpointExporter配置bean @Confi ...
- springboot配置shiro多项目实现session共享的详细步骤
springboot配置shiro多项目实现session共享的详细步骤 公司需要这样的需求: 有两个项目master 主项目.suiteone 项目,两个项目各自由shiro 安全框架管理,当不能登 ...
- Springboot集成社交登录功能(微博登录)以及Session共享
Springboot集成社交登录功能 pom <dependency><groupId>org.apache.httpcomponents</groupId>< ...
最新文章
- Unicorn 4.6.3 发布,Rack的HTTP服务器
- 使用 QEMU 进行系统仿真
- 当深度学习遇上量化交易——因子挖掘篇
- eclipse 摁住ctrl 键卡死
- Codeforces Round #327 (Div. 2) B Rebranding
- java 二进制 归属权限_【Java EE 学习 75 上】【数据采集系统第七天】【二进制运算实现权限管理】【权限分析和设计】...
- 华为云WeLink:智能工作空间,联接无限想象
- 烟台市与拼多多达成战略合作 启动烟台优品线上云购节活动
- 软件测试人员的三重境界
- MySQL 半同步复制+MMM架构
- linux grep egrep fgrep bash条件判断 bash测试 if 条件判断
- maven pom文件的一些自己的理解
- java输入输出流详解_Java输入输出流详解
- DIY 3.5毫米/MMCX接口的耳机线(无麦)
- 火狐浏览器播放插件Linux,Firefox浏览器带flash播放器插件
- DREAD风险评估模型
- 幻境网盾3.40 (skiller)
- 「macOS」“邮件”添加账户指南
- jquery常用方法之siblings方法
- html dashed 属性,css虚线样式dotted和dashed