OpenAPI Swagger API 未在 API 调用中发送“授权”标头

问题描述 投票:0回答:1

环境:

  • Java 17
  • 服务基于 Spring Boot 3
  • OpenAPI 依赖项:'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0', 'org.springdoc:springdoc-openapi-starter-common:2.1.0', 'org.springdoc:springdoc-openapi-ui:1.7.0',

我试图通过标头发送一个值,但查看 chrome 开发控制台,API 调用在请求中没有标头。 (仅供参考:在从 springfox 升级到 openapi 之前,API 与标头工作得很好)



发送其他标头类型时,我可以在 Chrome 开发控制台中看到。例如:

API定义:

@GetMapping(value = "somevalue")
@Operation(summary = "Get something")
@Parameters({
    @Parameter(
        name = "authorization1",
        description = "Access Token",
        required = true,
        in = ParameterIn.HEADER,
        schema = @Schema(implementation = String.class),
        example = "12345"),
    @Parameter(
        name = "code",
        description = "Code",
        required = true,
        in = ParameterIn.HEADER,
        schema = @Schema(allowableValues = {"A", "B", "C", "D"})
    )
})
public List<IIRDto> getII(
    @Parameter(required = true) @NotNull @RequestParam List<Long> idsOfSomething
) {
    // CODE
}


但是当标头名称为“authorization”时,它不会出现在请求标头中。

API定义:

@GetMapping(value = "somevalue")
@Operation(summary = "Get something")
@Parameters({
    @Parameter(
        name = "authorization",
        description = "Access Token",
        required = true,
        in = ParameterIn.HEADER,
        schema = @Schema(implementation = String.class),
        example = "12345"),
    @Parameter(
        name = "code",
        description = "Code",
        required = true,
        in = ParameterIn.HEADER,
        schema = @Schema(allowableValues = {"A", "B", "C", "D"})
    )
})
public List<IIRDto> getII(
    @Parameter(required = true) @NotNull @RequestParam List<Long> idsOfSomething
) {
    // CODE
}

请让我知道您从 UI 传递授权标头的建议。

spring-boot swagger openapi spring-restcontroller springdoc-openapi-ui
1个回答
0
投票

可以通过

OpenApi
bean 对所有 API 全局启用授权,如下所示:

@Configuration
public class OpenApiConfig {
  @Bean
  public OpenAPI openAPI() {
    final String securitySchemeName = "bearer-key";
    return new OpenAPI()
        .addSecurityItem(new SecurityRequirement().addList(securitySchemeName))
        .components(
            new Components()
                .addSecuritySchemes(securitySchemeName,
                    new SecurityScheme()
                        .name(securitySchemeName)
                        .type(SecurityScheme.Type.HTTP)
                        .scheme("bearer")
                        .bearerFormat("JWT")
                )
        );
  }
}

之后,API 右侧将出现一个小锁图标,如果单击,将显示授权弹出窗口,可以在其中插入

Authorization
标头的值。

swagger-ui
页面右上角还会有一个授权按钮,其作用相同。


要选择性地定义受保护的 API 而不是全局定义,请从配置中删除行:

.addSecurityItem(new SecurityRequirement().addList(securitySchemeName))
,并在每个受保护的 API 上方添加以下行:

@Operation(security = { @SecurityRequirement(name = "bearer-key") })
© www.soinside.com 2019 - 2024. All rights reserved.