Webflux环境下SwaggerUI配置不同端口Actuator端点的问题咨询
问题根因
- 分组拆分:springdoc-openapi检测到actuator使用独立端口时,默认会自动生成独立的actuator分组,和业务接口分组隔离。
- 调用报错:一是Swagger默认会用当前页面所在的业务端口请求actuator接口,端口不匹配;二是不同端口之间的请求属于跨域,actuator默认没有开启跨域允许,导致浏览器拦截请求。
解决方案
1. 调整application.yml配置
# 业务服务端口 server: port: 8080 # actuator独立端口配置 management: server: port: 9090 endpoints: web: exposure: include: '*' # 生产环境按需配置要暴露的端点,不要用通配符 # 配置actuator跨域规则,允许业务端口的Swagger访问 cors: allowed-origins: "http://localhost:8080" # 生产环境修改为实际Swagger部署地址 allowed-methods: "*" allowed-headers: "*" # springdoc配置 springdoc: show-actuator: true # 关闭自动生成actuator独立分组 actuator-group: enabled: false # 匹配所有业务路径和actuator路径 paths-to-match: /**,/actuator/**
2. 添加SpringDoc自定义配置类
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.servers.Server; import org.springdoc.core.models.GroupedOpenApi; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.List; @Configuration public class SpringDocConfig { @Value("${server.port:8080}") private Integer serverPort; @Value("${management.server.port:9090}") private Integer actuatorPort; @Value("${spring.profiles.active:local}") private String activeProfile; @Bean public OpenAPI customOpenAPI() { // 本地开发环境配置两个服务地址,生产环境按需修改为实际域名/IP if ("local".equals(activeProfile)) { Server businessServer = new Server() .url("http://localhost:" + serverPort) .description("业务API端口"); Server actuatorServer = new Server() .url("http://localhost:" + actuatorPort) .description("Actuator监控端口"); return new OpenAPI().servers(List.of(businessServer, actuatorServer)); } return new OpenAPI(); } @Bean public GroupedOpenApi allEndpointsGroup() { // 合并业务接口和actuator接口到同一个分组 return GroupedOpenApi.builder() .group("all-endpoints") .pathsToMatch("/**", "/actuator/**") .build(); } }
3. 功能验证
配置完成后重启服务,打开Swagger页面即可看到仅保留一个all-endpoints分组,同时展示所有业务接口和actuator接口。调用接口前在页面右上角的Servers下拉框选择对应端口的服务地址即可正常调用,不会出现TypeError: Failed to fetch错误。
注意:生产环境请收紧actuator端点暴露范围和跨域允许规则,避免出现安全风险。
内容的提问来源于stack exchange,提问作者Ock
相关产品推荐
相关产品推荐

