在maven的verify阶段执行安全扫描的核心思路是将owasp dependency-check等插件显式绑定至verify生命周期阶段,并配置failbuildoncvss等策略控制构建中断;verify是内置阶段,非插件名称,需通过pom.xml中verify明确指定执行时机。

在 Maven 的 verify 阶段执行安全扫描与检查,核心思路是将安全工具(如 OWASP Dependency-Check、Snyk、SonarQube Scanner 等)绑定到该生命周期阶段,而非直接依赖 “verify 插件”——Maven 本身没有叫 “verify 插件” 的官方插件,verify 是一个内置的生命周期阶段,需通过配置具体的安全插件来实现目标。
使用 OWASP Dependency-Check 插件(推荐入门)
这是最常用、开箱即用的开源依赖漏洞扫描工具,支持 Maven 集成,可精确绑定到 verify 阶段:
- 在
pom.xml中添加插件配置,并指定执行 phase 为verify - 确保
<executions></executions>中的<phase></phase>明确设为verify,否则默认可能在pre-integration-test或其他阶段运行 - 启用失败策略:设置
<failbuildoncvss></failbuildoncvss>(如 ≥ 7.0)或<failonerror></failonerror>控制构建是否中断
示例配置片段:
<plugin><groupid>org.owasp</groupid><artifactid>dependency-check-maven</artifactid><version>8.4.0</version><executions><execution><goals><goal>check</goal></goals><phase>verify</phase></execution></executions><configuration><failbuildoncvss>7.0</failbuildoncvss><suppressionfile>src/main/resources/dependency-check-suppressions.xml</suppressionfile></configuration></plugin>
集成 SonarQube Scanner(适合代码质量+安全统一管控)
SonarQube 不仅检测代码缺陷,也支持 SAST(静态应用安全测试)和已知漏洞规则(如 CVE 关联),需配合 Maven 插件在 verify 阶段触发分析:
- 使用
sonar-maven-plugin,其sonar:sonar目标默认绑定到verify阶段,无需额外指定 phase - 确保项目已配置
sonar.host.url、sonar.login(Token)等必要参数(可通过settings.xml或命令行传入) - 若只想在集成测试后扫描,可搭配
sonar.skip=false+ 显式调用mvn verify,避免被 profile 或条件跳过
结合集成测试结果做条件化安全检查
安全扫描应建立在“集成测试通过”的前提上,避免无效扫描。Maven 支持按顺序执行阶段,但需注意逻辑衔接:
-
integration-test和verify是连续阶段,只要integration-test成功,后续verify中的安全插件才会执行 - 若想让安全扫描仅在特定环境(如 CI)运行,可用
<profiles></profiles>包裹插件,并激活条件(如env.CI == true) - 不建议在
verify阶段执行耗时过长的远程扫描(如 Snyk CLI 全量分析),可改用异步方式或提前缓存扫描结果
注意事项与常见问题
实际落地中容易忽略的关键点:
- Maven 生命周期阶段名区分大小写,必须写
verify,不是Verify或VERIFY - 多个插件绑定同一阶段时,执行顺序取决于它们在
pom.xml中声明的先后位置 - 某些插件(如 Snyk Maven 插件)默认绑定在
compile阶段,需显式重绑定:<phase>verify</phase> - 本地开发时可加
-Dskip.dependency-check=true跳过扫描,CI 流水线则保持开启
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











