核心思路是控制依赖可见范围、主动排除高危传递依赖、统一版本避免混用老旧组件;用 implementation 替代 compile/api 防止依赖透出,缩小漏洞影响面,并显式 exclude 高危传递依赖如 log4j-core、commons-collections 等。

核心思路是:控制依赖的可见范围、主动排除高危传递依赖、统一版本避免混用老旧组件。
用 implementation 替代 compile(或 api)
旧写法 compile 或 api 会让依赖“透出”给下游模块,导致整个项目链路都带上它的传递依赖——哪怕你只用了一个工具类,也可能把 Log4j、Jackson 等整套树拉进来。
改用 implementation 后,该依赖仅在当前模块内有效,不会污染其他模块的 classpath:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 编译和运行时可用,但不向依赖它的模块暴露
- 大幅缩小潜在漏洞影响面(比如某个 utils 模块用了含 CVE 的 fastjson,只要没被其他模块直接 import,就不会触发)
- Gradle 5.0+ 默认推荐,也是 Android 和 Spring Boot 官方项目标准做法
显式排除已知高危传递依赖
很多漏洞来自间接引入(例如 A → B → C,而 C 有漏洞),这时不能等它升级,要主动砍断:
- 用
exclude去掉特定 group 或 module:
exclude group: 'org.apache.logging.log4j', module: 'log4j-core'
}
- 批量排除常见风险源(如旧版 commons-collections、jackson-databind
- 配合
./gradlew dependencies --configuration runtimeClasspath查看实际依赖树,确认排除是否生效
用 BOM 统一关键生态版本
Spring、Micronaut、Quarkus 等框架提供官方 BOM(Bill of Materials),能锁定整套兼容版本,避免手动声明时混入带漏洞的旧子模块:
- 声明方式(以 Spring Boot 为例):
implementation platform('org.springframework.boot:spring-boot-dependencies:3.2.0')
implementation 'com.fasterxml.jackson.core:jackson-databind'
implementation 'org.springframework:spring-web'
}
- BOM 内部已排除已知不安全组合,并对 patch 版本做兼容性验证
- 比逐个写死版本更可靠,也省去人工查 CVE 补丁版本的麻烦
启用依赖约束(dependency constraints)做兜底
即使没用 BOM,也能用 constraints 强制所有路径下的某依赖不低于指定安全版本:
- 在
dependencies块中添加:
implementation('com.fasterxml.jackson.core:jackson-databind') {
version {
require '2.15.3'
strictly '2.15.3'
}
}
}
-
strictly表示无论哪条路径引入,都必须是这个版本 - 适合应对突发 CVE(如 jackson-databind 2.14.x 系列多个 RCE),一键修复全项目
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










