Spring Boot OpenAPI Swagger API未随API调用沿着发送“Authorization”标头

kknvjkwl  于 2023-11-17  发布在  Spring
关注(0)|答案(1)|浏览(158)

环境:

  • Java 17
  • 服务在Sping 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调用没有在请求中的头。(FYI:在从springfox升级到openAPI之前,API可以很好地处理头)

发送其他类型的header时,我可以在Chrome dev控制台中看到。例如:

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
}

字符串
x1c 0d1x的数据

但是当header名称为“authorization”时,它不会显示在请求header中。

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。

xcitsw88

xcitsw881#

Authorization header可以通过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") })

相关问题