谷粒商城实战笔记-228-商城业务-认证服务-自定义SpringSession完成子域session共享
文章目录
- 一,228-商城业务-认证服务-自定义SpringSession完成子域session共享
- 1. `cookieSerializer()`
- 2. `springSessionDefaultRedisSerializer()`
一,228-商城业务-认证服务-自定义SpringSession完成子域session共享
前面弄清楚了分布式服务中的两个问题:
- 浏览器端跨域名cookie不能共享
- 服务端跨服务session不能共享
我们已经在上一节解决了扩服务session共享的问题,即利用Spring Session将session存储在redis中,所有有需要的服务都可以从redis中获取session。
这一节主要是解决:
- ① 浏览器端跨域名cookie不能共享的问题
- ② session在redis中的序列化方式,默认是jdk的序列化,改为json序列化
对于第一个问题,虽然是浏览器端的问题,但是必须在服务端解决,思路非常简单,将cookie的domain设置为根域名,而不是发起请求的域名。
即认证服务在设置cookie的domain时,应该设置为gulimall.com,而不是auth.gulimall.com。
根据Spring Session的文档,要实现上述目标,通过增加一个自动配置类即可:
@Configuration
public class GulimallSessionConfig {@Beanpublic CookieSerializer cookieSerializer() {DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();//放大作用域cookieSerializer.setDomainName("gulimall.com");cookieSerializer.setCookieName("GULISESSION");return cookieSerializer;}@Beanpublic RedisSerializer<Object> springSessionDefaultRedisSerializer() {return new GenericJackson2JsonRedisSerializer();}}
1. cookieSerializer()
这个方法用于配置 CookieSerializer,它是 Spring Session 中用来序列化和反序列化 HTTP Cookie 的对象。CookieSerializer 负责处理与 HTTP Cookie 相关的操作,比如设置 Cookie 的名称、路径、域名等。
具体作用:
- 创建一个
DefaultCookieSerializer实例。 - 设置 Cookie 的域名(
setDomainName)为"gulimall.com",这表示该 Cookie 可以在整个gulimall.com域及其子域下有效。 - 设置 Cookie 的名称(
setCookieName)为"GULISESSION",这是客户端用来标识 Session 的 Cookie 名称。
目的:
- 增强 Cookie 的作用范围:通过设置 Cookie 的域名,可以确保该 Cookie 在整个
gulimall.com域下有效,这样就可以在不同的子域间共享 Session 信息。 - 自定义 Cookie 的名称:通过设置 Cookie 名称,可以根据需要选择一个更具辨识度的名字。
2. springSessionDefaultRedisSerializer()
这个方法用于配置 Spring Session 中 Redis 的序列化器。Redis 是一种键值存储系统,它默认使用字符串类型的数据结构。因此,当你想要将复杂的 Java 对象存储到 Redis 中时,需要对其进行序列化。
具体作用:
- 返回一个
GenericJackson2JsonRedisSerializer实例。 - 这个序列化器使用 Jackson JSON 库将 Java 对象转换为 JSON 字符串,然后再存储到 Redis 中。
目的:
-
序列化和反序列化对象:由于 Redis 默认只支持字符串类型的值,因此需要一个序列化器将 Java 对象转换为字符串形式,以便在 Redis 中存储和检索。
-
兼容复杂对象:使用 JSON 格式可以轻松地存储和检索复杂的 Java 对象,而不仅仅是基本的数据类型。
-
cookieSerializer()方法配置了 HTTP Cookie 的序列化器,主要用于设置 Cookie 的名称和作用范围,以便在不同的子域间共享 Session 信息。 -
springSessionDefaultRedisSerializer()方法配置了 Redis 的序列化器,用于将 Java 对象转换为 JSON 字符串形式存储到 Redis 中,使得可以存储复杂的对象数据。
这两个方法共同作用于 Spring Session 的配置,确保了 Session 数据可以正确地在客户端和 Redis 之间传递和存储。
相关文章:
谷粒商城实战笔记-228-商城业务-认证服务-自定义SpringSession完成子域session共享
文章目录 一,228-商城业务-认证服务-自定义SpringSession完成子域session共享1. cookieSerializer()2. springSessionDefaultRedisSerializer() 一,228-商城业务-认证服务-自定义SpringSession完成子域session共享 前面弄清楚了分布式服务中的两个问题&…...
Elasticsearch核心
一、几个核心概念 1、节点:一个节点(Node)就是一个es进程,一个服务器可以部署多个节点 查询节点以及节点信息: http://127.0.0.1:9200/_cat/nodes?v 2、角色,是指节点在集群中担任什么角色:…...
Python.NET:打开Python与.NET世界互通的大门
Python.NET 是一个强大的工具,它为 Python 程序员提供了一种与 .NET 公共语言运行时 (CLR) 无缝集成的途径。它就像一座桥梁,将 Python 的灵活性与 .NET 的强大功能连接起来,为开发者提供了前所未有的自由和可能性。 1. Python.NET 的核心价值…...
uniapp - plugins的组件配置使用
点击进入到uniapp中mp-weixin的配置中 点击进入小程序的plugin的配置 在项目中,我们可引用插件的使用,例如一些快递100,点餐插件的业务引入 添加插件 在使用插件前,首先要在小程序管理后台的“设置-第三方服务-插件管理”中添加…...
Microsoft Edge WebView2 截图
使用工具可以保存可见区域 CallDevToolsProtocolMethodAsync("Page.captureScreenshot", Params) always returns only visible part of html page including scrollbars. I tried all possible combinations of "fromSurface" and "captureBeyondVi…...
[word] 复杂文本如何仅全选word中的表格 (简单跟做即可)
问题描述 在word文档中,有各种形式的文本,有纯文本,有表格,有图片或者更多其它形式参杂在一起,本篇记录解决如何只全选中文档中的所有表格形式的部分,从而方便对表格进行批量修改和操作 环境说明 word版…...
Aop切面编程
学习视频 一、定义模型:订单保存模型,订单更新模型,业务层,日志模型 订单保存模型 /*** author durunwu* date 2024-08-20-21:04*/ Data public class SaveOrder {private Long id; }订单更新模型 /*** author durunwu* date …...
目标检测 | yolov9 原理和介绍
相关系列: 目标检测 | yolov1 原理和介绍 目标检测 | yolov2/yolo9000 原理和介绍 目标检测 | yolov3 原理和介绍 目标检测 | yolov4 原理和介绍 目标检测 | yolov5 原理和介绍 目标检测 | yolov6 原理和介绍 目标检测 | yolov7 原理和介绍 目标检测 | yolov8 原理和…...
如何在不格式化的情况下解锁Android智能手机密码
如果您忘记了密码,您的 Android 移动设备会将您锁定。发生这种情况时,通常可以通过执行恢复出厂设置来重新获得对设备的访问权限。可悲的是,这将导致所有数据的丢失。下面列出了在不丢失任何个人数据的情况下解锁锁定的Android 手机的有效方法…...
ts语法、nvm的使用以及github访问速度
TS基础语法 let aa:string "123" let bb:number 123 let cc:boolean true let dd:undefined undefined let ee:null null let list:Array<string> ["1", 2, 3] let list2:string[] ["1", 2, 3]interface Ibj {name: string,age: n…...
缓存实现方式
缓存是一个常见的话题,因为它对于提高应用程序性能至关重要。缓存是一种存储数据的临时地方,以便快速访问数据,减少对原始数据源(如数据库或文件系统)的访问次数,从而提高应用程序的响应速度和吞吐量。 Jav…...
鸿蒙内核源码分析(中断切换篇) | 系统因中断活力四射
关于中断部分系列篇将用三篇详细说明整个过程. 中断概念篇 中断概念很多,比如中断控制器,中断源,中断向量,中断共享,中断处理程序等等.本篇做一次整理.先了解透概念才好理解中断过程.用海公公打比方说明白中断各个概念…...
回归预测|基于雪消融优化相关向量机的数据回归预测Matlab程序SAO-RVM 多特征输入单输出 SAO-RVM
回归预测|基于雪消融优化相关向量机的数据回归预测Matlab程序SAO-RVM 多特征输入单输出 SAO-RVM 文章目录 前言回归预测|基于雪消融优化相关向量机的数据回归预测Matlab程序SAO-RVM 多特征输入单输出 SAO-RVM 一、SAO-RVM模型1. 基本模型原理2. 贝叶斯框架3. 模型优化流程4. 总…...
如何在HTML中创建链接?什么是CSS定位?什么是CSS优化?
HTML使用标签 <a> 来设置超文本链接。 超链接可以是一个字,一个词,或者一组词,也可以是一幅图像,您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分。 当您把鼠标指针移动到网页中的某个链接上时,箭…...
1.Java:集合
集合作用: 1.动态保存任意多个对象。 2.提供操作对象方法比如add,remove,set,get等方法。 3.使用集合添加,删除代码简洁。 集合分类 集合分为单列集合以及双列集合。 单列集合: 双列集合: Collection接口特点 1.Collection…...
C语言从头学49—文件操作(四)
本文继续上一篇有关 "文件操作" 内容并继续其编号。 十九、函数 ftell() 函数 ftell() 返回文件内部指针的当前位置,该函数原型定义在头文件 stdio.h中。 使用格式:ftell(参1); 参1:文件指针 返…...
算法力扣刷题记录 八十四【46.全排列】
前言 回溯章节第11篇。记录 八十四【46.全排列】 回溯学习过:组合问题、切割问题、子集问题。 本文是排列问题。 一、题目阅读 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入&…...
[C++进阶]map和set
一、关联式容器 STL中的部分容器,比如:vector、list、deque、forward_list(C11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。 那什么是关联式容器?它与序列式容器…...
ios机型下input输入框输入时拉高
问题 部分iphone或者ipad机型下,网页中使用input输入框时,调起ios软键盘输入时,input输入框被拉高,导致布局错位或者变化。 <input type"text" name"phonenum" >直观表现 注:在android机型…...
nacos 使用 docker 单机部署连接 MySQL 数据库并开启鉴权
文章目录 本地部署的配置启用鉴权(未验证) docker部署的配置修改docker 镜像源启用鉴权,必须添加如下环境变量如何生成鉴权的密钥 完整环境变量docker启动命令 本地部署的配置 文件结构 application.properties #配置文件 mysql-schema.sql …...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
