文章总结: 本文详解SpringBootActuator与Swagger的集成配置与安全风险。重点剖析heapdump泄露及CVE-2022-22947漏洞复现,建议禁用敏感端点并升级组件。针对Swagger,强调生产环境应关闭或加固鉴权以防未授权访问,为开发者提供兼顾便利性与安全性的最佳实践。 综合评分: 86 文章分类: 应用安全,安全建设,漏洞分析,WEB安全
第50天-Spring Boot 监控与接口文档:Actuator 与 Swagger 实战
原创
萧瑶 萧瑶
AlphaNet
2026年2月24日 11:04 韩国
在 Spring Boot 应用开发中,生产级监控与自动化接口文档是两个至关重要的环节。
· Actuator 帮助我们在应用运行时监控健康状况、收集指标、追踪 HTTP 请求等。
· Swagger 则让接口文档实时生成并可视化,极大提升前后端协作效率。
本文基于 Spring Boot,深入讲解 Actuator 和 Swagger 的集成、配置、安全风险及防护措施,并附带实际漏洞案例,帮助你全面掌握这两大工具的生产用法。
第一部分:Spring Boot Actuator —— 生产级监控与管理
- 什么是 Actuator?
Spring Boot Actuator 是 Spring Boot 提供的生产级功能模块,它通过一系列 HTTP 端点 或 JMX 暴露应用内部状态,包括:
· 健康检查(/actuator/health)
· 指标信息(/actuator/metrics)
· 环境属性(/actuator/env)
· 线程转储(/actuator/threaddump)
· 堆转储(/actuator/heapdump)等
借助这些端点,运维人员可以实时监控应用,开发人员可以快速定位问题。
- 快速开始:引入依赖与基础配置
2.1 添加 Maven 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.2 配置暴露的端点
默认情况下,只有 health 和 info 端点通过 HTTP 暴露。若要暴露所有端点(生产环境请谨慎),可如下配置:
application.properties
management.endpoints.web.exposure.include=\*
application.yml
management:
endpoints:
web:
exposure:
include: '\*'
启动应用后,访问 http://localhost:8080/actuator 即可看到所有可用端点。
- 端点安全配置:禁用敏感端点
部分端点(如 env、heapdump)可能泄露敏感信息(数据库密码、API密钥等),务必在正式环境禁用或严格保护。
application.properties
management.endpoint.env.enabled=false
management.endpoint.heapdump.enabled=false
application.yml
management:
endpoint:
heapdump:
enabled: false # 禁用 heapdump 端点
env:
enabled: false # 禁用 env 端点
提示:还可以结合 Spring Security 为端点设置访问权限,例如仅允许内网或特定角色访问。
- 图形化监控:Spring Boot Admin
Spring Boot Admin 是一个社区项目,提供了可视化的 Web UI 来管理多个 Spring Boot 应用。
· Server 端:作为监控中心,需要添加依赖并启用 @EnableAdminServer。
· Client 端:被监控的应用,向 Server 注册并上报状态。
快速搭建示例
Server 端
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.7.10</version>
</dependency>
启动类添加 @EnableAdminServer。
Client 端
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.7.10</version>
</dependency>
配置文件中指定 Admin Server 地址:
spring.boot.admin.client.url: http://localhost:8081
- 安全问题深入:heapdump 泄漏与利用
heapdump 端点会生成当前 JVM 堆的转储文件(.hprof),其中可能包含内存中的明文密码、令牌、数据库连接串等敏感信息。攻击者获取该文件后,可使用工具提取关键数据。
常见分析工具
· JDumpSpider:https://github.com/whwlsfb/JDumpSpider
一款专门从堆转储文件中提取敏感信息的工具。
· heapdump_tool:https://github.com/wyzxxz/heapdump_tool
同样用于分析 heapdump,自动提取密码、配置等。
· jvisualvm(JDK 自带):可手动浏览堆对象,但效率较低。
防护建议
· 生产环境务必关闭 heapdump 端点(如上述配置)。
· 如果必须开启,应结合 Security 限制访问 IP 或增加身份验证。
- 额外漏洞案例:Spring Cloud Gateway RCE (CVE-2022-22947)
该漏洞利用 Actuator 端点配合 Gateway 动态路由功能,可导致远程代码执行。
漏洞复现环境搭建
- 创建 Spring Boot 项目,使用以下版本(漏洞版本):
<spring-boot.version>2.5.2</spring-boot.version>
<spring-cloud.version>2020.0.3</spring-cloud.version>
- 添加 Gateway 依赖(漏洞版本 3.1.0):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>3.1.0</version>
</dependency>
- 启用 Actuator 并暴露 Gateway 端点:
management.endpoints.web.exposure.include=gateway,...
- 发送恶意请求 创建含 SpEL 表达式的路由,触发 RCE。
详细复现步骤可参考:https://www.cnblogs.com/qgg4588/p/18104875
防范措施
· 升级 Spring Cloud Gateway 至安全版本(>=3.1.1)。
· 若不需动态路由,可禁用 Actuator 的 gateway 端点。
· 严格限制 Actuator 端点的访问权限。
第二部分:Spring Boot Swagger —— 自动化接口文档
- Swagger 简介
Swagger 是一套开源的接口文档工具,它通过注解自动生成 RESTful API 文档,并提供可视化的测试页面(Swagger UI)。在前后端分离开发中,Swagger 能保证文档与代码实时同步,减少沟通成本。
- 快速集成 Swagger
2.1 引入依赖
Swagger 2.9.2(较老版本,仍广泛使用)
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
Swagger 3.0.0(推荐,基于 OpenAPI 3)
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
2.2 配置路径匹配策略
Spring Boot 2.6+ 默认路径匹配策略改为 path-pattern-parser,与 Swagger 不兼容,需修改为 ant-path-matcher:
application.properties
spring.mvc.pathmatch.matching-strategy=ant-path-matcher
application.yml
spring:
mvc:
pathmatch:
matching-strategy: ant\_path\_matcher
2.3 启用 Swagger
· Swagger 2.x:在启动类或配置类上加 @EnableSwagger2。
· Swagger 3.x:可加 @EnableOpenApi,但 starter 已自动配置,通常无需显式注解。
2.4 访问 Swagger UI
· Swagger 2.x:http://ip:port/swagger-ui.html
· Swagger 3.x:http://ip:port/swagger-ui/index.html
- 接口测试与安全风险
Swagger 将应用所有接口暴露在 UI 上,方便开发测试的同时,也给攻击者提供了攻击面。常见风险包括:
· 接口未授权访问(如用户登录、后台管理接口)
· 敏感信息泄露(通过接口返回数据结构)
· 文件上传接口被滥用
· 接口参数未做校验,导致 SQL 注入、XSS 等
自动化测试工具
这些工具既可辅助开发测试,也可被攻击者用于扫描接口:
· Apifox / Postman / Reqable:接口调试与自动化测试
· 攻击者可能通过 Swagger UI 获取接口列表,然后针对未授权接口或文件上传等功能发起攻击。
安全建议
· 生产环境关闭 Swagger 暴露:可通过 @Profile(“!prod”) 条件注解或配置 springfox.documentation.enabled=false 控制。
· 若必须在线提供文档,应添加访问权限控制(如 Spring Security 认证)。
· 对所有接口实施严格的权限校验和输入验证。
总结
Spring Boot Actuator 和 Swagger 是开发与运维的利器,但若配置不当,也可能成为系统安全的突破口。
· Actuator 应遵循最小暴露原则,禁用敏感端点,并结合监控系统(如 Spring Boot Admin)统一管理。
· Swagger 在开发环境能极大提升效率,但务必在生产环境关闭或加以保护。
掌握这两大工具的正确用法,才能让 Spring Boot 应用既健壮又安全。
参考资源
· Spring Boot 官方文档
· Spring Boot Actuator 官方指南
· Swagger 与 Spring Boot 集成
· SpringBootVulExploit
· SpringBootVul-GUI
希望这份学习笔记能帮助你在 Spring Boot 开发中更好地应用监控与接口文档技术!如果你有任何疑问或经验分享,欢迎留言讨论。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:AlphaNet 萧瑶 萧瑶《第50天-Spring Boot 监控与接口文档:Actuator 与 Swagger 实战》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论