安全地覆盖 spring-boot 依赖版本

时间:2021-06-21 12:57:31

标签: java spring spring-boot spring-security dependency-management

我使用的是 spring-boot 2.1.18.RELEASE。

我们需要将 Spring 安全升级到 5.2+。 这样做会导致诸如 NoClassDefFound 之类的错误,所以我开始手动升级其他库,解决并发现其他问题。 例如,我不得不升级一个依赖项(spring-security-web),这导致:

java.lang.NoClassDefFoundError: org/springframework/core/log/LogMessage

我的问题:如何知道升级一个特定的 spring 依赖项是否安全?

是否有每个依赖项的最低要求信息?例如:spring-security-web 5.2.10.RELEASE 需要 spring-core 5.2.0+

1 个答案:

答案 0 :(得分:1)

一般来说,所有 spring 安全依赖项应该匹配相同的版本,因为它们是一起管理的。所以 spring-security-web-5.2.10.RELEASE 需要匹配 spring-security-core-5.2.10.RELEASE。但是这些依赖项通常是传递性管理的,因此您明确依赖的任何 spring-security 依赖项都应该具有相同的版本,并且任何其他(传递性依赖项)都不应在您的构建中声明版本。

至于像 spring-security-web 依赖于 spring-core 的东西,没有对任何版本做出明确的保证,因为它是一个单独的项目。但同样,spring-core 是一个传递依赖项,不需要指定版本。两个项目(Spring Framework、Spring Security)都使用 semver 版本控制并遵循发布序列,因此一般的经验法则是在次要版本上保持一致。因此,spring-security-web-5.2.10.RELEASE 需要匹配 5.2.x 的 spring-core

最后,如果您坚持维护旧的 Spring Boot 应用程序并且无法升级,您应该坚持使用与您的项目兼容的所有依赖项的次要版本。例如,尝试仅针对某些依赖项从 spring-security 5.1 升级到 5.2+ 而不升级 Spring Boot 可能会导致问题。最好使用 Spring Boot 一次升级整个 Spring 项目生态系统。在此之前,您无需进行重大升级即可获取安全补丁,因为它们已维护了很长一段时间。在您的情况下,升级到 5.2,您确实需要考虑将 Spring Boot 升级到 2.2 以获取 Spring Security 的最新安全补丁。

相关问题