如何请求Swagger UI全局为每个端点添加bearer token字段?

4
因为这里描述的问题,我正在迁移到Springdoc。现在,在Swagger UI中,每个端点都没有一个用于bearer token的字段,但这是预期的,因为这些端点是安全的。enter image description here 我有以下配置:
@Bean
public OpenAPI myAPI() {
  return new OpenAPI()
      .components(new Components()
          .addSecuritySchemes("bearer-key",
              new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT")))
      .info(new Info()
          .title("MY API")
          .description("Documentation of API v.1.0")
          .version("1.0")
      ).addSecurityItem(
          new SecurityRequirement().addList("bearer-jwt", Arrays.asList("read", "write")));
}

我已经找到了解决方法——为每个单独的端点打上标记:
@Operation(summary = "some description", security = { @SecurityRequirement(name = "bearer-key") })

但我不喜欢做这种重复的工作。

有没有一种方法可以使其对每个 REST 端点进行全局设置?


我也遇到了同样的问题,不幸的是没有找到解决方法。在我们的情况下并不那么糟糕,因为每个端点上已经有@Operation注释了。 - João Dias
1
@João Dias 我找到了解决方案 https://dev59.com/F8Pra4cB1Zd3GeqPg3gw#70859998 - gstackoverflow
2个回答

2

它可以处理小的差异

当我使用Swagger 2时,我必须提供类似于以下格式的令牌:

Bearer eyJhbGciOi....

但现在我必须像这样提供它:

eyJhbGciOi....

public OpenAPI myAPI() {
        return new OpenAPI()
                .components(new Components()
                        .addSecuritySchemes("bearer-key",
                                new SecurityScheme()
                                        .type(SecurityScheme.Type.HTTP)
                                        .scheme("bearer")
                                        .bearerFormat("JWT")
                        )
                )
                .info(new Info()
                        .title("My API")
                        .description("Documentation of API v.1.0")
                        .version("1.0")
                ).addSecurityItem(
                        new SecurityRequirement()
                                .addList("bearer-jwt", Arrays.asList("read", "write"))
                                .addList("bearer-key", Collections.emptyList())
                );
    }

1
使用 io.swagger.v3.oas.annotations.OpenAPIDefinition 全局定义 io.swagger.v3.oas.annotations.security.SecurityRequirement
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.customizers.OpenApiCustomiser;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@OpenAPIDefinition(security = {@SecurityRequirement(name = "bearer-key")})
public class OpenApiConfig {

    @Bean
    public OpenApiCustomiser customerGlobalHeaderOpenApiCustomiser() {
        return openApi -> openApi.getComponents()
            .addSecuritySchemes("bearer-key",
                new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT"));
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接