安全重写spring启动依赖版本

fquxozlt  于 2021-09-30  发布在  Java
关注(0)|答案(1)|浏览(307)

我使用的是spring boot 2.1.18.release。
我们需要将spring security升级到5.2+。这样做会导致类似的错误: NoClassDefFound 因此,我开始手动升级其他库,解决并发现其他问题。例如,我必须升级一个依赖项(spring security web),这导致:

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

我的问题:如何知道升级一个特定的spring依赖项是否安全?
每个依赖项是否有最低要求信息?例如:SpringSecurityWeb5.2.10.release需要SpringCore5.2.0+

3gtaxfhh

3gtaxfhh1#

一般来说,所有spring安全依赖项都应该匹配同一版本,因为它们是一起管理的。所以 spring-security-web-5.2.10.RELEASE 需要匹配 spring-security-core-5.2.10.RELEASE . 但是这些依赖项通常是通过传递的方式进行管理的,因此您明确依赖的任何spring安全依赖项都应该具有相同的版本,而任何其他依赖项(传递依赖项)都不应该在您的构建中声明版本。
差不多 spring-security-web 取决于 spring-core ,因为它是一个单独的项目,所以没有对任何版本做出明确的保证。但是再一次, spring-core 是可传递的依赖项,不需要指定版本。这两个项目(spring框架、Spring Security )都使用semver版本控制,并遵循发布序列,因此一般的经验法则是在次要版本上对齐。所以,, spring-security-web-5.2.10.RELEASE 需要匹配 spring-core 第5.2.x条。
最后,如果您一直在维护一个旧的spring boot应用程序,并且无法升级,那么您应该坚持使用与项目兼容的所有依赖项的次要版本。例如,仅针对某些依赖项尝试从spring security 5.1升级到5.2+,而不升级spring boot可能会导致问题。最好使用SpringBoot立即升级spring项目的整个生态系统。在那之前,您可以在不进行重大升级的情况下获取安全补丁,因为它们已经维护了相当长的一段时间。在升级到5.2的情况下,您确实需要考虑将spring boot升级到2.2,以获得spring security的最新安全补丁。

相关问题