千家信息网

Spring Session Redis 在不同服务间共享 Session 时的类共享方案的示例分析

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,今天就跟大家聊聊有关Spring Session Redis 在不同服务间共享 Session 时的类共享方案的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根
千家信息网最后更新 2026年11月03日Spring Session Redis 在不同服务间共享 Session 时的类共享方案的示例分析

今天就跟大家聊聊有关Spring Session Redis 在不同服务间共享 Session 时的类共享方案的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Spring Session Redis 是不安全的

当在多服务之间使用 Spring Session Redis 进行 Session 共享要非常小心,因为它很不安全,很有可能导致整个服务实例不可用,无法处理任何请求。其中比较危险的地方就是在进行序列化,反序列化的时候(这种类型的错误尤其容易在没有开发规范的团队内发生,就是什么样的数据可以往共享存储里面存,什么样的不能存。存的时候要以什么样的格式去存,这些都要有规定才比较安全。因为共享存储是会影响到别人的不仅仅是为了自己的服务用起来方便)。RedisSerializer 接口的实现都是在序列化和反序列化出错的时候直接抛出异常从而导致整个请求错误。

public interface RedisSerializer {        /**         * Serialize the given object to binary data.         *          * @param t object to serialize         * @return the equivalent binary data         */        byte[] serialize(T t) throws SerializationException;        /**         * Deserialize an object from the given binary data.         *          * @param bytes object binary representation         * @return the equivalent object instance         */        T deserialize(byte[] bytes) throws SerializationException;}

下面用一张图来说明我遇到的问题。Spring Session 的诞生老实说并不是为了分布式系统,而是为集群系统提供了一种 Session 解决方案。但是我们把 Spring Session 用在了分布式系统上用以解决 Session 共享的问题老实说本身就是有点难为人家 Spring Session 了 。

Spring Session 实现 Session 共享的大致原理

Spring Session 实现 Session 共享的大致原理如下图所示 , 使用一个 Filter 来拦截所有请求,在拦截到请求之后对 HttpServletRequest 和 HttpServletResponse 进行包装 (HttpServletRequestWrapper , HttpServletResponseWrapper)。在包装中对 session 进行控制 ,将 session 数据都存储在第三方存储当中。

Spring Session Redis 在不同服务间共享 Session 时的类共享方案

在了解了 Spring Session 的工作原理后再去考虑这个问题就有头绪了 。还是通过图形的方式来做大概的说明。

学习 Spring Session 的 SessionRepositoryFilter 的实现方式 , 添加一个 Filter 顺序在 SessionRepositoryFilter 之后 , 在拦截过程中包装 HttpServletRequest , 重写 getSession(boolean create) 和 getSession() 方法, 自定义一个 SafetyHttpSessionWrapper 包装 Session ,重写 setAttribute(String name , Object value) 函数 , 在保存属性成功后利用 redis 的发布订阅机制发送消息到 redis , 消息的内容为所保存对象的 .class 文件数据。在消息订阅端 , 接收到消息后利用 javassist 和 net.bytebuddy.dynamic.loading.ByteArrayClassLoader 将 .class 文件数据加载转换成 Class 的实例对象,但是这个 Class 实例的范围被限定在 ByteArrayClassLoader 中 , 而这个 ByteArrayClassLoader 是提供给 RedisSerializer 内部使用的 , 比如 JdkSerializationRedisSerializer , GenericJackson2JsonRedisSerializer 都需要使用到 ClassLoader 。这样当 服务A 在存储任何自定义的对象在 Session 中时, 访问服务 B 也不会出现读取 Session 反序列化 ClassNotFoundException 的错误了。

看完上述内容,你们对Spring Session Redis 在不同服务间共享 Session 时的类共享方案的示例分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

服务 序列 存储 方案 内容 数据 消息 不同 安全 原理 实例 对象 就是 时候 系统 错误 问题 包装 示例 分析 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 河南云网互联网络科技有限公司 华宇互联网科技 以房互联网科技 互联网科技排名 互联网科技小额贷款 互联网金融 科技创新 互联网巨头投资的硬核科技 科技赋能互联网健康 成都玖崟互联网科技有限公司乐商圈怎么样 黑科技闪耀互联网之光 移动互联网年度科技创新 互联网金融科技展 中国科技创新与世界互联网大会 互联网新科技动漫ppt素材 互联网金融科技名词解释 智帮互联网科技公司最近动向 互联网科技包装股份有限公司上市 工业互联网科技创业 普陀区互联网教育科技管理办法 现代互联网科技公司 互联网科技论文 互联网金融中的现代科技 港股科技和互联网 健康食品互联网创新科技园项目 晋城互联网科技 高科技互联网发展前景如何 从那以后互联网科技有限公司 陕西九四连强互联网科技有限公司 众联互联网络科技 盐城市攀科互联网科技有限公司
0