繁体   English   中英

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

[英]safely overriding spring-boot dependency version

我正在使用 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+

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM