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 开始,此问题将成为过去。类的序列化现在将经过测试以确保与前一个次要版本的兼容性。此增强功能确保用户升级到较新版本不会无意中破坏序列化对象,从而提供更强大、更无缝的体验。

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

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

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看全部