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

如何在Kong网关后正确配置Spring OpenAPI UI访问路径

问题原因

这个异常的核心原因是SpringDoc OpenAPI默认基于服务自身的上下文路径生成重定向地址、接口文档拉取地址,接入Kong网关后,服务默认感知不到网关侧的/local/api路径前缀,导致生成的地址直接使用了服务自身的/foo上下文路径,缺少了网关前缀。

修复方案

方案1:配置X-Forwarded前缀(推荐,适配多环境)

第一步:修改Kong路由配置,添加转发前缀头

在你现有的kong.yml的foo路由配置中新增请求头转换插件,给后端服务传递网关路径前缀:

services:
 - name: foo
   url: http://localhost:9000/foo
   routes:
   - name: foo-route
     paths:
      - /local/api/foo
     methods:
     - GET
     - POST
     - PUT
     - OPTIONS
     - DELETE
     - PATCH
     - HEAD
     # 新增以下插件配置
     plugins:
     - name: request-transformer
       config:
         add:
           headers:
           - X-Forwarded-Prefix: /local/api/foo

第二步:Spring Boot开启转发头识别

在Spring Boot的application.yml中添加如下配置,让框架识别网关传递的转发头:

server:
  forward-headers-strategy: framework

配置完成后SpringDoc会自动识别X-Forwarded-Prefix头,生成带网关前缀的正确地址,无需硬编码路径。

方案2:硬编码SpringDoc路径前缀(适合固定前缀场景)

如果不想修改Kong配置,可以直接在Spring Boot中配置SpringDoc的固定路径前缀,修改application.yml:

springdoc:
  swagger-ui:
    config-url: /local/api/foo/v3/api-docs/swagger-config
    url: /local/api/foo/v3/api-docs
  server-url: http://localhost:8000/local/api/foo

也可以通过代码注入自定义OpenAPI Bean实现:

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.servers.Server;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringDocConfig {
    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                .addServersItem(new Server().url("/local/api/foo"))
                .info(new Info().title("Foo服务接口文档").version("1.0"));
    }
}

验证

配置完成后访问http://localhost:8000/local/api/foo/swagger-ui.html,会正常重定向到带/local/api/foo前缀的Swagger UI地址,接口文档可正常加载。

内容的提问来源于stack exchange,提问作者Andrea Damiani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:15:00