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

如何通过声明式方式启用Swagger UI中的Authorize按钮?

解决方案:Spring Cloud Gateway 中 Swagger UI JWT 认证按钮配置问题

针对网关中 Swagger UI 无法正常加载 JWT 认证输入框的问题,核心是要确保全局注册 JWT 认证方案并关联到所有聚合接口,以下是具体的声明式配置步骤:

1. 核心配置思路

网关的 Swagger UI 是聚合多个下游服务的接口文档,因此需要在网关的 OpenAPI 全局配置中定义认证方案,并强制所有接口关联该方案,而不是将注解随意放在主类或普通控制器中。

2. 具体代码实现(基于 SpringDoc OpenAPI,当前主流方案)

步骤1:定义 JWT 认证方案配置类

创建专门的配置类,通过注解声明 JWT 认证的规则:

import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.enums.SecuritySchemeType;
import io.swagger.v3.oas.annotations.security.SecurityScheme;
import org.springframework.context.annotation.Configuration;

@Configuration
@OpenAPIDefinition
@SecurityScheme(
    name = "BearerAuth", // 认证方案名称,后续要引用
    type = SecuritySchemeType.HTTP,
    scheme = "bearer",
    bearerFormat = "JWT", // 指定为JWT格式
    in = io.swagger.v3.oas.annotations.enums.ParameterIn.HEADER
)
public class GatewayOpenApiSecurityConfig {
}

步骤2:全局关联认证方案

配置 OpenAPI Bean,将上述定义的认证方案全局绑定到所有接口:

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class OpenApiGlobalConfig {

    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                // 关联之前定义的认证方案名称
                .addSecurityItem(new SecurityRequirement().addList("BearerAuth"));
    }
}

步骤3:网关 Swagger 聚合配置

确保网关正确聚合下游服务的接口文档:

import org.springdoc.core.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GatewaySwaggerAggregateConfig {

    @Bean
    public GroupedOpenApi gatewayAggregateApi() {
        return GroupedOpenApi.builder()
                .group("gateway-all-services")
                .pathsToMatch("/**") // 匹配所有路由路径
                .build();
    }
}

步骤4:配置文件补充(application.yml)

开启 SpringDoc 网关支持:

springdoc:
  api-docs:
    enabled: true
  swagger-ui:
    enabled: true
    path: /swagger-ui.html
  gateway:
    enabled: true # 关键:开启网关的Swagger聚合支持

3. 验证配置正确性

访问网关的 OpenAPI JSON 地址(默认 /v3/api-docs),检查是否包含以下内容:

{
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  },
  "security": [
    {
      "BearerAuth": []
    }
  ]
}

如果上述字段存在,说明配置生效,此时 Swagger UI 的 Authorize 按钮点击后会正常显示 JWT 输入框。

4. 问题根源说明

之前的配置失效是因为:

  • 网关的 Swagger 聚合逻辑不会自动识别主类/普通控制器上的 @SecurityScheme 注解
  • 未全局添加 SecurityRequirement,导致 Swagger UI 无法感知需要加载认证输入框

内容的提问来源于stack exchange,提问作者Sergey Zolotarev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:31:03