You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 02:12:02