环境:
我试图通过标头发送一个值,但查看 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 传递授权标头的建议。
可以通过
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") })