当前位置: 首页 > news >正文

谷粒商城——session共享

问题1

一个系统中不同微服务的session共享。

问题1的解决办法

1. session复制的方法:微服务的副本之间通过通信共享session。这样每一个微服务的副本都会保存所有的session。(缺点:造成大量的通信,多处额外的通信开销。)

2. 客户端存储:将session的信息保存到用户端的cookie中,每次请求后端的时候,都会带上这个cooike。后端再解析用户的信息。(缺点:存在cookie中不安全,每次请求都要携带完整cookie,浪费带宽)

3. 通过hash一致性方法,对于1个用户ip,其请求会被固定路由到一个固定的服务器中。(缺点:session依然存储在web-server中,重启服务session会丢失。其次,当服务数量扩展的时候,路由的位置会发生改变。)

4. 使用数据库统一存储session信息,后端从数据库中获取。

第四种方法的详细介绍(SpringSession)

1.. 修改jsessionid的作用域(扩大到整个服务)。

1. 导入SpringSession依赖。

2. 在登陆所在的微服务中添加store-type=redis(用redis存储session)

3. 在启动类上方添加@EnableRedisHttpSession依赖

4. 创建Session信息类。并实现序列化。(不序列化存储到redis会报无法序列化的错误)。

5. 随后再调用session.setAttribute方法保存Session信息类的时候,会自动将其保存至redis中。

问题2

不同系统的session共享:如新浪微博系统和新浪网页之间的session共享。此时无法使用SpringSession。因为不同系统之间无法共享jsessionid。

问题2解决办法-单点登录

单点登录需要一个单独的登录认证服务器,不同系统的登录都要通过这个登陆验证服务器。核心思想就是把使用统一的登陆服务。

假如说现在有A、B两个系统。其单点登录流程如下:

用户进入A系统,A系统发现用户未登录,后端命令浏览器跳转到登录服务器。并且在重定向地址中(用?)加入参数,参数内容是A的登陆服务地址,用于表示是A系统让你跳转的,登陆成功后你得重定向到A系统主页。

此时单点登录服务跳转至登录页(统一的前端页面)。用户输入账号密码并将其发送给单点登录服务。登陆成功,单点登陆服务首先会为每一个用户生成一个唯一的令牌token作为key,value为表示用户的信息存入redis中。随后重定向至之前A系统的登录后端,并且定向地址中要加入参数,参数值为令牌。重定向到A系统的登陆后端此时A会向单点登录询问令牌的合法性,若合法则登陆成功。将token写到cookie和session中,下次用户在访问的时候,通过cookie与session的比较就能知道是谁。

此时,在登陆B系统,后端发现未登录,跳转到统一登录服务,但是之前A系统已经在统一登陆服务进行了登录,此时浏览器中的统一登陆前端cookie还保存着用户的token。此时单点登录服务会重定向到B登录后端,并将token作为参数。此时B会向单点登录询问令牌的合法性,若合法则登陆成功。(与A后面的步骤类似了)。

http://www.lryc.cn/news/404070.html

相关文章:

  • Java 语言及其常用集合类的操作,以及反射机制与注解
  • 《系统架构设计师教程(第2版)》第12章-信息系统架构设计理论与实践-02-信息系统架构
  • 用html做python教程01
  • PHP接口与性状的优雅应用
  • R语言模型评估网格搜索
  • Haproxy服务
  • Unity VR开发入门:探索虚拟现实世界的无限可能
  • 系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.2 业务处理系统-解读
  • 32_ConvNeXt网络详解
  • Langchain[3]:Langchain架构演进与功能扩展:流式事件处理、事件过滤机制、回调传播策略及装饰器应用
  • java导出PDF详细教程+各种踩坑
  • 【博士每天一篇文献-算法】连续学习算法之HNet:Continual learning with hypernetworks
  • 使用 tcpdump 进行网络流量捕获与分析
  • k8s集群 安装配置 Prometheus+grafana
  • 【Java--数据结构】二叉树oj题(上)
  • 微服务之间Feign调用
  • 【Qt】按钮的属性相关API
  • blender和3dmax和maya和c4d比较
  • visio保存一部分图/emf图片打开很模糊/emf插入到word或ppt中很模糊
  • 沙尘传输模拟教程(基于wrf-chem)
  • 使用 Python 进行测试(8)纯净测试
  • python的tkinter、socket库开发tcp的客户端和服务端
  • Python面试题:Python中的异步编程:详细讲解asyncio库的使用
  • 【信号频率估计】MVDR算法及MATLAB仿真
  • HarmonyOS NEXT零基础入门到实战-第二部分
  • 《小程序02:云开发之增删改查》
  • SQL执行流程、SQL执行计划、SQL优化
  • 【前端】JavaScript入门及实战41-45
  • 更加深入Mysql-04-MySQL 多表查询与事务的操作
  • 基于最新版的flutter pointycastle: ^3.9.1的AES加密