Spring Security 6.3 增加了被动的 JDK 序列化/反序列化,实现无缝升级

工程 | Marcus Hert Da Coregio | 2024 年 1 月 19 日 | ...

在 Spring Security 的早期版本中,我们特意决定不保证不同版本项目之间序列化类(通过 JDK 序列化)的兼容性。这个决定主要考虑了 RMI 的背景,建议服务器和客户端都使用相同版本的 Spring Security。

随着越来越多的应用程序依赖持久会话和 Spring Session 等技术,不一致的序列化问题变得越来越重要。持久会话意味着通过将用户会话转换为可以存储并在以后的各种请求、服务器甚至应用程序重新启动时使用的格式来保存用户会话。在这种情况下,如果 JDK 序列化不是被动的,则在尝试使用在旧版本或新版本的 Spring Security 中保存的对象时可能会导致问题。

为任何可序列化的 Spring Security 类定义了一个共享的 serialVersionUID。 但是,每次小版本发布都会更新此通用标识符。 因此,例如,在 6.0 版本中序列化的对象无法在 6.1 版本中反序列化,反之亦然——即使对象的结构保持不变。 这意味着看似简单的小版本升级可能会导致问题。

尽管 Spring Security 的策略通常是不在小版本之间引入任何重大更改,但 Java 序列化的情况并非如此。

从 Spring Security 6.3 开始,这种担忧将成为过去。 类的序列化现在将进行兼容性测试,以确保与前一个小版本兼容。 这种增强功能向用户保证,升级到较新版本不会无意中中断序列化的对象,从而提供更强大、更无缝的体验。

如果您遇到与序列化兼容性相关的任何问题,请在项目的问题跟踪器上报告。 我们期待收到您的反馈,并感谢您在使 Spring Security 更加可靠和用户友好方面的合作。

有关更多详细信息,您可以参考以下链接

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

抢占先机

VMware 提供培训和认证,以加速您的进步。

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部