目录

应用场景

如何解决

(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共享相关推荐

  1. SpringBoot 实现Session共享

    HttpSession,是通过Servlet容器创建并进行管理的,创建成功以后将会保存在内存中,这里将会使用Redis解决session共享的问题. 创建项目 添加pom 添加相关的maven < ...

  2. SpringBoot 分布式Session共享

    一.在分布式开发时Nginx负载均衡时传统做法是 把session手动存到redis中 1.常用做法redis 客户端发起一个请求,这个请求到达nginx上之后被,nginx转发给tomcatA上,然 ...

  3. 【SpringBoot】18、SpringBoot中使用Session共享实现分布式部署

    前言:我们知道,在单体项目中,我们将用户信息存在 session 中,那么在该 session 过期之前,我们都可以从 session 中获取到用户信息,通过登录拦截,进行操作 但是分布式部署的时候, ...

  4. SpringBoot一个依赖搞定Session共享,没有比这更简单的方案了!

    作者:江南一点雨 微信公众号:牧码小子(ID:a_javaboy) 上一篇:推荐10个你不得不关注的NB技术公众号 有的人可能会觉得题目有点夸张,其实不夸张,题目没有使用任何修辞手法!认真读完本文,你 ...

  5. java分布式会话redis_详解springboot中redis的使用和分布式session共享问题

    对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash.轮训.根据权重.随机等.不管对于哪一种负载均衡算法,由于Nginx对不同的请求分发到某一个Tomcat,Tomca ...

  6. C#session共享+redis_技术干货分享:基于SpringBoot+Redis的Session共享与单点登录

    categories: 架构 author: mrzhou tags: SpringBoot redis session 单点登录 基于SpringBoot+Redis的Session共享与单点登录 ...

  7. Springboot整合Websocket遇到的坑_websocket session不支持序列化,无法存储至redis_Websocket相关问题总结(Session共享,用户多端登录等)

    Springboot整合Websocket遇到的坑 一.使用Springboot内嵌的tomcat启动websocket 1.添加ServerEndpointExporter配置bean @Confi ...

  8. springboot配置shiro多项目实现session共享的详细步骤

    springboot配置shiro多项目实现session共享的详细步骤 公司需要这样的需求: 有两个项目master 主项目.suiteone 项目,两个项目各自由shiro 安全框架管理,当不能登 ...

  9. Springboot集成社交登录功能(微博登录)以及Session共享

    Springboot集成社交登录功能 pom <dependency><groupId>org.apache.httpcomponents</groupId>< ...

最新文章

  1. Unicorn 4.6.3 发布,Rack的HTTP服务器
  2. 使用 QEMU 进行系统仿真
  3. 当深度学习遇上量化交易——因子挖掘篇
  4. eclipse 摁住ctrl 键卡死
  5. Codeforces Round #327 (Div. 2) B Rebranding
  6. java 二进制 归属权限_【Java EE 学习 75 上】【数据采集系统第七天】【二进制运算实现权限管理】【权限分析和设计】...
  7. 华为云WeLink:智能工作空间,联接无限想象
  8. 烟台市与拼多多达成战略合作 启动烟台优品线上云购节活动
  9. 软件测试人员的三重境界
  10. MySQL 半同步复制+MMM架构
  11. linux grep egrep fgrep bash条件判断 bash测试 if 条件判断
  12. maven pom文件的一些自己的理解
  13. java输入输出流详解_Java输入输出流详解
  14. DIY 3.5毫米/MMCX接口的耳机线(无麦)
  15. 火狐浏览器播放插件Linux,Firefox浏览器带flash播放器插件
  16. DREAD风险评估模型
  17. 幻境网盾3.40 (skiller)
  18. 「macOS」“邮件”添加账户指南
  19. jquery常用方法之siblings方法
  20. html dashed 属性,css虚线样式dotted和dashed

热门文章

  1. 死神来了 细节决定成败
  2. python面向对象程序设计实训学生自我总结_实训学生自我总结
  3. 大学生计算机应用技术自我评价,计算机应用技术本科生的自我评价
  4. java从键盘输入字符串并求长度_java从键盘输入字符串的方法
  5. unity c#帧同步网络优化方案
  6. 【题解】幼儿园篮球题(范德蒙德卷积+斯特林+NTT)
  7. linux下static状态,关于linux的添加永久静态路由的static-routes方法
  8. 机器学习实验之糖尿病预测
  9. 机械码补码,阶码的表示与范围思考总结
  10. Nvm,Nrm使用教程