领先一步
VMware 提供培训和认证,助您加速进步。
了解更多在 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 更加可靠和用户友好。
更多详情,您可以参考以下链接