ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Spring Boot 2.7.x漏洞盘点与升级修复实战指南

Spring Boot 2.7.x漏洞盘点与升级修复实战指南 直接做一次漏洞影响梳理和修复实操记录吧。我这两年接手的老项目十个里有八个还跑在 Spring Boot 2.7.x 上甚至还有 2.1、2.3 这种远古版本。每次安全扫描报告一出来领导拿着 CVE 清单过来问“这个要不要紧、那个能不能不升”解释成本特别高。这篇就把 2.7.x 到 2.7.18 这个区间里真正值得关注的漏洞、影响判断方法、以及升级和缓解的实操路径一次说清楚。1. 漏洞公告刷屏之前先搞懂 2.7.x 的处境1.1 2.7.18 是 2.7 系列的终点站Spring Boot 2.7.x 是 2.x 时代的最后一个常规维护分支官方在 2023 年 11 月发布了 2.7.18这也是整个 2.7 系列的最终版本。这个版本同时把 Spring Framework 锁到 5.3.31把 Spring Security 锁到 5.7.11之后官方不再提供任何免费的安全补丁和功能更新。EOLEnd of Life这个词听起来很吓人但实际含义要拆开看你的业务代码不会因为在某个日期之后突然崩溃漏洞也不会因为 EOL 就集中爆发。EOL 真正影响的是“修复渠道”——之后再爆出新的高危漏洞官方不会再为 2.7.x 发布补丁你需要自己找替代方案或者被迫升级到 3.x。所以我一直跟团队强调EOL 是风险累积的起点不是系统崩溃的开关。1.2 为什么还有大量项目死守 2.7.x不是大家不想升而是升级成本摆在那。2.7.x 到 3.x 看着只是大版本号加一实际上牵扯到 Jakarta EE 命名空间迁移javax 到 jakarta、Spring Security 配置方式大变、以及各种 starter 的兼容性重排。我见过一个项目代码量不大但依赖了七八个内部公共组件全是基于 2.x 编的升级 3.x 意味着所有组件要重新出包这工作量直接劝退。另一个原因是 2.7.x 本身相当成熟。它支持 JDK 8 到 JDK 21兼容 Spring Cloud 2021.0.x 到 2022.0.x配合 MyBatis-Plus、Redisson、XXL-Job 这些国内常用组件都很稳。对于“能跑就不动”的业务系统来说只要没有直接暴露的漏洞2.7.x 确实还能撑一段时间。但问题在于“没有直接暴露”这件事很多人其实没判断准。1.3 判断漏洞影响面的三个基本维度面对一份漏洞报告先别慌着改代码按下面三个维度过一遍再决策可达性这个漏洞组件是否真的在你的应用运行链路里被调用。比如 spring-cloud-function-context 是 Spring Cloud Function 的模块如果业务代码根本没用到 Function 相关注解和接口那对应的漏洞影响就很有限。利用条件是默认配置就能触发还是需要额外条件。比如 Spring4Shell 需要 JDK 9、使用了 POJO 参数绑定、部署在 Tomcat 且以 WAR 包形式运行条件卡掉了一大批实际场景。暴露面应用是对外开放还是内网隔离。纯内网管理系统和直接挂在公网上的服务面临的风险等级完全不同。搞清楚这三个维度再回头看 CVE 清单很多“高危”其实可以降级处理但有些“中危”反而要重视——因为它可能能被低权限攻击者组合利用。2. 2.7.x 生命周期内影响较大的漏洞逐个拆解2.1 Spring4ShellCVE-2022-229652022 年 3 月底爆出来的这个漏洞可能是 2.7.x 生命周期里知名度最高的一个。它本质上是 Spring Framework 的数据绑定Data Binding机制缺陷——当应用使用 POJO 作为 Controller 方法的参数对象时攻击者可以通过构造特殊的 URL 参数绕过 Spring 的允许访问内部属性限制最终写入恶意配置。在特定部署场景下JDK 9、Tomcat、WAR 包可以写入 Tomcat 的日志配置把恶意字节码写到 WEB-INF/classes 目录形成落地 webshell 的效果。注意2.7.x 不是一开始就免疫而是从 2.6.6、2.5.14、2.5.13 和 5.3.18 及以上版本开始修复。如果你还在 2.7.0 到 2.7.5 之间而且项目满足前面提到的那几个条件那这个漏洞需要优先处理。如果项目用 Spring Boot 内嵌 Tomcat 跑 jar 包利用难度会大不少但不代表可以完全不处理。这里给一个排查思路检查项目里有没有直接用 POJO 接收前端传参的接口也就是类似public String createOrder(OrderDTO order)这种写法。有的话再看 JVM 版本是否大于等于 9再看是否以 WAR 部署。三个条件同时满足参考 CVSS 9.8 的评分这个优先级就是 P0。2.2 Spring Cloud Function SpEL 注入CVE-2022-22963这个漏洞跟 Spring Boot 本体关系不大但很多 Spring Boot 项目里集成了 spring-cloud-function-web如果版本低于 3.1.7 或 3.2.3攻击者构造一个spring.cloud.function.routing-expression请求头就能触发 SpEL 表达式解析执行。我见过不少项目把 spring-cloud-function 引入进来仅仅是为了用它的流式处理能力做内部数据路由根本没有对外暴露相关端点。这种情况下漏洞在代码层面存在但网络上无法触达风险就可控了。真正要警惕的是把相关接口暴露到公网的项目。修复方式很直接升级 spring-cloud-function 到 3.1.7 或 3.2.3或者如果确认没用到直接移除依赖最干净。2.3 Spring Security 授权绕过系列CVE-2023-20860、CVE-2023-20863先说 CVE-2023-20860这是 Spring Security 在 5.7.8 和 5.8.3 中修复的一个授权绕过漏洞。问题出在AntPathRequestMatcher对 URL 的匹配逻辑上——当请求路径里包含;分号时处理方式跟预期不一致导致某些本应被拦截的请求绕过权限校验。常见场景是项目用 Spring Security 配置了/admin/**需要管理员权限访问但攻击者构造/admin/;xxx或类似变体由于分号后的内容被当作路径参数处理匹配逻辑出现偏差请求可能绕过了/**的兜底权限校验。注意官方公告里说影响范围是使用mvcMatcher或AntPathRequestMatcher的配置。Spring Boot 2.7.x 默认对应的 Spring Security 是 5.7.x 系列。修复方式是升到 5.7.8 或 5.8.3对应 Spring Boot 是 2.7.10 和 2.7.11。CVE-2023-20863 是另一个授权绕过问题线程绑定的 SecurityContext 在某些异步或响应式场景下没有正确清理可能导致后续请求复用了前一个请求的认证信息。如果项目里大量使用Async或异步处理 HTTP 请求就需要关注这个。修复版本同样是 5.7.8 和 5.8.3。这套漏洞最坑的地方在于它不会在功能测试里暴露因为正常业务不会去访问/admin/;xxx这种路径只有攻击者做路径探测时才会触发。所以代码评审和自动扫描都不太容易发现依赖版本检查是最靠谱的手段。2.4 Spring Framework URL 解析不一致CVE-2024-22243这个漏洞在 2.7.18 中修复主要影响使用UrlBasedCorsConfigurationSource配置跨域规则的应用。攻击者利用 RFC 规范中对 URL 解析的差异构造特殊格式的 Origin 头绕过 CORS 校验。说白了就是你以为只允许https://trusted.com跨域访问但攻击者把 Origin 头写成https://trusted.com.attacker.com或者https://trusted.com%2eattacker.com某些解析逻辑下会被当成同源请求放行。这里要强调的是 CORS 不是安全边界——它只是浏览器的同源策略约束绕过了 CORS 不代表能直接拖库攻击者仍然需要找到其他漏洞。但如果你有需要严格限制跨域来源的接口比如某些内部开放 API这个问题就值得重视。修复版本是 Spring Framework 5.3.33对应 Spring Boot 2.7.18。我处理过一个案例某个项目用 CORS 配置限制内网其他域名的前端页面调用当时扫描报告报了 CVE-2024-22243排查后发现实际网络环境里所有客户端都是可信域攻击者构造恶意 Origin 也无法从外部触达。所以在修复优先级上我把它排在了授权绕过和 RCE 类漏洞后面。2.5 数据绑定绕过CVE-2022-22968这个跟前两年 Spring Data 相关漏洞有类似的思路但攻击路径不一样。CVE-2022-22968 是 Spring Framework 在 5.3.20 和 5.2.21 中修复的数据绑定规则绕过漏洞与 CVE-2022-22965Spring4Shell的攻击模式类似尽管它是低危但它修复的是另一种绕过方式即通过构造特殊的请求头键值让封装对象进入setPropertyValue时绕过限制。很多团队以为升了 2.7.5 就一劳永逸——Spring4Shell 修了但这个数据绑定绕过的补丁是在后面的版本才合入的。所以版本管理上要盯紧不是修了一个同类漏洞就等于同类全修了。2.6 其他值得关注的 DoS 和低危项CVE-2023-20861Spring Framework 5.3.25 和 5.2.23 修复的 SpEL 拒绝服务漏洞通过构造特殊表达式触发大量字符串拼接或递归调用消耗 CPU 和内存。这个主要用于内部有大量 SpEL 表达式动态解析的场景普通 CRUD 项目受影响很小。CVE-2023-34040Spring Framework 在 6.0.13、5.3.30 中修复的拒绝服务漏洞。攻击者向服务端发送特定格式的 multipart 请求解析过程中分配大量内存可能导致 OOM。Spring Boot 2.7.16 修复了这个问题属于建议尽早更新的范围。Spring Security 的 CVE-2023-34034WebFlux 项目使用ServerHttpSecurity时错误的securityMatcher配置可能导致规则失效。影响 5.8.7 之前的 5.8.x、6.0.5 之前的 6.0.x、6.1.3 之前的 6.1.x。2.7.x 对应的 5.7.x 不受影响。CVE-2024-22262Spring Framework 存取超大嵌套 map 或列表时触发 UnsupportedOperationException 导致请求失败的 DoS。主要影响 6.0.x 和 5.3.x 的部分版本如果项目有依赖用户输入构造嵌套 JSON 的场景建议关注。下面把主要的漏洞按“实际风险”和“修复版本”做一个汇总CVE组件风险类型Spring Boot 修复版本优先度CVE-2022-22965Spring FrameworkRCE条件苛刻2.6.6 / 2.7.0 前需升级到 2.7.5高危CVE-2022-22963Spring Cloud FunctionSpEL RCE升级到 2.7.x 对应版本或单独升组件中高危取决于暴露面CVE-2022-22968Spring Framework数据绑定绕过2.7.5中危CVE-2023-20860Spring Security授权绕过2.7.10高危CVE-2023-20861Spring FrameworkDoS5.3.25 对应 2.7.11低危CVE-2023-20863Spring Security认证信息污染2.7.10中危CVE-2023-34040Spring FrameworkDoS2.7.16中危CVE-2024-22243Spring FrameworkCORS 绕过2.7.18中危CVE-2024-22262Spring FrameworkDoS2.7.18低危3. 漏洞通告背后的通用规律和判断方法3.1 Spring 安全公告的固定节奏和套路Spring 生态的安全公告一般通过 GitHub Advisories 和 Pivotal 官方博客发布格式非常固定漏洞编号、影响版本、修复版本、漏洞类型、是否有已知利用。看多了就会发现一个规律——绝大多数问题都是框架层Spring Framework、Spring Security的Spring Boot 本身作为集成封装层反而很少直接出洞。这意味着排查漏洞时要把 Spring Boot 和底层框架版本拆开看。比如扫描报告显示 Spring Boot 是 2.7.8但底层 Spring Framework 可能锁定在 5.3.21。Boot 2.7.8 对应的 Framework 是 5.3.21Security 是 5.7.5。你需要对照的不是“Boot 是否大于某个版本”而是“Framework 是否大于 5.3.25”这类底层判断。3.2 排查依赖版本的实操手段Maven 和 GradleMaven 项目扫描依赖树是最快的mvn dependency:tree | grep -E spring-(core|web|security|context|webmvc)|spring-boot|spring-cloud-functionGradle 项目则用gradle dependencyInsight --dependency spring-web gradle dependencyInsight --dependency spring-security-web看到确切版本后再去对照官方公告里的修复版本区间。有一点要注意如果项目里对某个框架包单独指定了版本比如直接在 pom 里声明 spring-web 为 5.3.30那么 Spring Boot 的版本版本号就不代表整个依赖链的安全状态。3.3 用 OWASP Dependency-Check 做自动化巡检一次性的手工排查治标不治本建议把依赖安全检查集成到 CI 流程里。我常用的方案是 OWASP Dependency-Check支持 Maven 插件和独立命令行两种方式。Maven 插件配置很简单plugin groupIdorg.owasp/groupId artifactIddependency-check-maven/artifactId version9.0.9/version configuration autoUpdatetrue/autoUpdate failBuildOnCVSS7/failBuildOnCVSS suppressionFiles suppressionFiledependency-check-suppression.xml/suppressionFile /suppressionFiles /configuration executions execution goals goalcheck/goal /goals /execution /executions /plugin这个插件会从 NVD 拉取漏洞库扫描所有依赖并生成 HTML 报告每个依赖会列出关联的 CVE、CVSS 评分、修复版本。failBuildOnCVSS可以设置阈值让高危漏洞直接阻断构建真正把安全卡在发布前。如果你不想引入额外工具简单一点可以用 Spring 官方提供的 Spring Boot 项目依赖版本对照每个 Boot 版本页面都会列出对应的 Framework、Security、Cloud 的版本组合安全性约束就照这个表查。4. 升级路线怎么选小版本升级 vs 跨版本迁移4.1 最优先选择升到 2.7.18如果项目还停留在 2.7.0 到 2.7.17 之间的任何版本第一选择是在 2.7.x 分支内升到最后版本 2.7.18。这是成本最低、风险最小的路径。操作步骤很简单修改 pom 里的 parent 版本号parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.7.18/version relativePath/ /parent改完后执行编译和测试重点观察几个地方是否有没有锁版本导致上下浮动变化的依赖。Spring Boot 的 BOM 只是建议版本如果项目里对某些包显式声明了版本升级 Boot 不会自动改。是否有和框架版本强相关的配置变化。2.7.7 到 2.7.18 之间Spring Boot 没有引入破坏性变更但 Spring Security 的 5.7.8 到 5.7.11 之间修了不少问题个别 filter 行为可能有细微变化。跑一遍核心业务流程特别是登录、权限、上传下载、异步任务相关的。我自己的经验绝大多数 2.7.x 内部的升级只需要改一个版本号编译不出错测试过了就能上。个别项目会有一些基于内部 API 的扩展代码比如自定义了 BeanPostProcessor 或 ApplicationListener这些需要跑全量集成测试。整体来说 2.7.x 内部升级的回归成本远低于跨大版本。4.2 跨版本升级到 Spring Boot 3.x 的准备工作如果项目长期有人维护那么迟早要走这一步。但 2.7.x 到 3.x 的升级不是改个版本号那么简单下面几项工作必须提前做JDK 升级Spring Boot 3.x 要求 JDK 17 起步。应用服务器、CI 镜像、运维脚本里所有的 JDK 版本都要先确认是否支持。javax 到 jakarta 迁移Servlet、Validation、Persistence、Annotation 等 API 的包名全部变了。老代码里的import javax.servlet.http.HttpServletRequest都要改成import jakarta.servlet.http.HttpServletRequest。这个可以用 OpenRewrite 或 Spring 官方的迁移工具辅助完成但涉及面很广。Spring Security 配置重写3.x 里antMatchers被移除用requestMatchers替代WebSecurityConfigurerAdapter被彻底废弃推荐用SecurityFilterChainBean 方式配置。很多老的http.authorizeRequests()...链式写法都要改。Spring Cloud 组件对齐如果项目使用了 Spring Cloud注意 3.x 对应的 Spring Cloud 版本是 2022.0.xKensington或更新版本。各种 starter 的 groupId 都带上了jakarta后缀标识。这些事拆开看每一项都不难但合在一起就是一个不小的工程。我建议用迭代方式先升级到 2.7.18确认业务稳定、依赖锁定无浮动再排期做 3.x 迁移。4.3 升级过程的避坑清单含实际案例升级过程中最容易踩的坑我列一下亲身经历过的Spring Security 升级后静态资源被拦截从 5.7.8 升级到 5.7.11 时有项目静态资源访问突然开始返回 401。排查后发现是安全配置里用requestMatchers匹配路径时正则写得不够严谨导致/static/**被兜底规则拦了。这种问题必须在升级后做静态资源抽查。依赖树里混入多个 Spring 版本某个内部组件直接依赖 spring-web 5.3.20通过依赖调解整体版本被拉低到 5.3.20表面上 Boot 是 2.7.18实际 Framework 还是旧版本。这是我最常遇到的情况。解决办法是显式在 pom 里声明 spring-framework-bom 或者具体模块版本覆盖传递依赖。测试环境缓存导致验证不充分有次升级后测试同事反馈功能正常但上线第二天出现一个奇怪的 NPE。后来发现测试环境有本地 Maven 缓存把旧版本 jar 复用了一部分实际验证的并不是目标版本。升级后一定要强制mvn clean install -U或删掉~/.m2/repository/org/springframework再构建。配置属性迁移被忽略Boot 2.7.18 里有个别配置项名做了调整如spring.redis.*在 3.x 里被改为spring.data.redis.*。在 2.7 系列内部没有这些问题但做跨版本时这项工作量很大建议先用 Spring Boot 官方迁移指南里的配置清单逐项核对。5. 暂时不升级的情况怎么缓解和规避5.1 用版本覆盖把风险按住当短期无法升级到 3.x或者 2.7.18 也暂时不能上时有一个中间手段单独升级底层组件版本不升 Boot。比如 2.7.8 的 Boot 对应 Framework 5.3.21可以在 pom 里手动把 spring-web、spring-webmvc、spring-core 等模块版本覆盖到 5.3.33同时把 Spring Security 覆盖到 5.7.11。这样你拿到的安全级别与 2.7.18 基本一致但 Boot 版本号不变——对那些依赖了旧 Boot 特性的项目这是一种折中方案。具体做法是引入 Spring Framework BOMdependencyManagement dependencies dependency groupIdorg.springframework/groupId artifactIdspring-framework-bom/artifactId version5.3.33/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement注意版本覆盖后必须跑完整的编译、单元测试、集成测试。因为我遇到过覆盖 Framework 版本后某些内部组件因为编译版本不一致出现NoSuchMethodError的情况。只要测试覆盖够就能提前发现。5.2 安全配置层面的缓解手段拦截器加针对路径参数变体的校验如果担心 CVE-2023-20860 这类授权绕过可以写一个全局过滤器检测 URL 中包含的路径参数分号后内容是否会导致实际匹配的路径变化发现异常直接拒绝。这样即使 Framework 有漏洞也能从应用层拦一道。限制 multipart 上传大小和请求体大小针对 DoS 类漏洞在 application.yml 里合理设置spring.servlet.multipart.max-file-size和max-request-size能大大降低攻击面。CORS 配置双重校验对 CVE-2024-22243在有的版本里即使框架补丁没跟上也可以通过自定义 Filter 对 Origin 做精确校验——先做域名后缀匹配再做协议匹配不允许直接信任配置里的通配符格式。5.3 网络层临时止血如果漏洞影响的是公网接口升级要排期那先在网络层处理在网关或负载均衡层配置规则拦截样本特征。以 CVE-2022-22963 为例可以在 WAF 或网关层对包含spring.cloud.function.routing-expression请求头的请求直接拒绝。Spring4Shell 的特征是请求参数里包含class.module.classLoader关键字网关层做包含匹配就能拦住绝大部分尝试。这种方法治标不治本但确实能争取时间。要注意的是拦截规则必须基于“攻击样本特征”而不是“攻击者 IP”因为攻击者会换 IP 重试。同时拦截要打在网关层而不是应用层应用层打进 Tomcat 再拦截已经晚了。6. 常见问题与排查技巧实录6.1 为什么扫描器说 2.7.18 仍然报漏洞很多人以为升到 2.7.18 就万事大吉结果扫描器仍然报出一堆漏洞。最常见的两种情况一是扫描器基于 NVD 数据反查依赖树某个传递依赖没有升级。比如项目里直接引用了 spring-web 5.3.30扫描器会查到这个版本存在 CVE-2024-22243跟 Boot 版本无关。这时需要看报出来的组件是不是必须的如果是内部组件的传递依赖就要在上层组件修正或排除后显式声明白名单版本。另一个情况是扫描规则落后。NVD 的数据录入有时比官方公告慢几天扫描器可能把已经修复的版本误报为受影响。处理方法是手工核对 Spring 官方公告确认修复版本号后在依赖检查工具的 suppression 文件里配置忽略项并附上说明。6.2 升级后启动报错NoSuchMethodError或ClassNotFoundException这个问题的根源是依赖树中的多个 Spring 模块版本不一致。举个我实际遇到的Spring Boot 2.7.18 的依赖管理声明 spring-web 为 5.3.31但项目某个内部组件显式依赖了 spring-webmvc 5.3.20Maven 依赖调解把 webmvc 拉低了而 spring-web 还是 5.3.31。运行时不一定会立刻出错只有当代码调用到旧版本 webmvc 里不存在的方法时才会炸。排查方法是先跑一遍mvn dependency:tree重点看所有 spring-* 组件的版本号是否完全一致。发现不一致就按第 4.1 节的方式用 spring-framework-bom 统一锁版本。6.3 漏洞修好了但应用出现了性能退化这个情况多发生在升级 Spring Security 之后。曾经有个项目从 5.7.5 升到 5.7.11接口访问量没有任何变化但 CPU 使用率高了 15%。查了半天发现是 5.7.9 引入了一个新的请求匹配计算逻辑某些路径在每次请求时都会做额外正则匹配。解决方案有两个方向一是整理安全配置里过多的antMatchers尽量用更精确的路径表达式减少正则回退二是确认安全过滤链路中是否有重复的 filter 注册。如果性能问题影响严重考虑做一次安全配置瘦身把不需要拦截的静态路径全部排除到过滤链之外。6.4 漏洞确认了但研发说改不动怎么办实际沟通中经常遇到安全团队报了高危漏洞研发团队说改不了、受影响组件是历史包袱。这时候我的建议是不要硬碰硬而是把风险量化为三个问题让研发回答这个组件的漏洞如果被利用能影响哪些业务数据这个组件是否有外部依赖方在使用能否下线如果暂时不能升级或下线网络层面能否先做访问限制很多时候聊完这几个问题研发团队会发现要么组件其实可以移除要么可以加一层网关拦截。真正“完全不能动”的情况反而是最少的。6.5 常见问题速查表现象大概率原因处理方式扫描报大量 spring-web 漏洞传递依赖版本被低版本组件覆盖用 dependency:tree 找出版本来源统一锁版本升级后NoSuchMethodErrorSpring 模块版本不一致加 spring-framework-bom 约束或者排除低版本传递依赖升级 Security 后授权异常5.7.8 对匹配规则更严格检查requestMatchers配置在测试环境验一遍接口变慢 CPU 升高Security 路径匹配计算量增大优化安全配置减少过宽匹配和正则回退升级 3.x 后静态资源 401jakarta 迁移时 UrlBased 配置迁移遗漏检查静态资源排除规则改用 lambda DSL 方式配置扫描器误报已修复版本NVD 数据滞后对照官方公告确认加 suppression 规则说明7. 给还在用 2.7.x 的团队几句实在话7.1 安全不是安全团队单独的事我看到太多项目把漏洞修复当成“安全部门推过来的任务”研发被动响应修完就算。但实际漏洞影响范围的判断、修复方式的选型、升级的排期都应该由真正熟悉代码和部署架构的人来做。安全团队能给到的是 CVE 清单和评分但“这个接口会不会被外部打到”这种问题只有写代码的人最清楚。所以我建议每个 Java 项目至少指定一个“安全接口人”熟悉项目依赖、知道哪些模块对外、哪些数据敏感。这个人不一定是安全专家但要有能力解读 CVE 公告、能操作依赖分析工具、能判断修复优先级。一个几百人的团队配一个这样的角色比买一堆扫描工具然后没人看报告有用得多。7.2 依赖管理的纪律比漏洞扫描更重要前几年很多团队连依赖树都没看过依赖里混着三四个版本的 Spring 模块也没人管。这种项目就算天天扫漏洞也堵不住——修了一个组件另一个组件版本不对又冒出来一个漏洞。长期来看建立一套管依赖的纪律比什么都强统一用 BOM 管理版本尽量少在子模块单独声明框架版本定期更新基础组件不是等漏洞爆了才动记录每个依赖引入的原因避免“顺手加了一个不需要的库”CI 里嵌入依赖安全检查让漏洞在合并前就被拦下7.3 不要为了安全而盲目追新写了这么多升级建议但最后仍然想说不要因为有一两个 CVE 就急着把整个系统推到 3.x。Spring Boot 3.x 本身很成熟但你的项目里可能有一堆第三方组件还没跟上强行升级只会把风险从“框架漏洞”转移到“业务故障”上。我更推荐的做法是先把 2.7.x 推到 2.7.18把底层 Framework 和 Security 锁到安全版本同时清理掉不再使用的依赖再开始规划 3.x 迁移。这个路径虽然慢但每一步都稳。毕竟线上系统的最高原则从来不是“用最新的框架”而是“在自己能控制的范围内不带着已知漏洞运行”。
返回列表