SpringFox迁移至springdoc openapi后Authorization请求头未正常发送的问题咨询
解决springdoc-openapi API密钥授权请求头不发送的问题
哎,我之前从SpringFox转springdoc的时候也踩过这个坑!你现在的问题核心是只定义了SecurityScheme,但没把它和API接口关联起来——Swagger UI虽然能显示授权输入框,但不知道该在哪些请求里带上这个头,所以点击Execute时自然不会自动添加。
你只需要做下面其中一步就能解决:
1. 全局给所有接口启用授权(推荐)
直接在@OpenAPIDefinition注解里添加security属性,关联你定义的SecurityScheme名称,这样所有接口都会自动带上Authorization请求头:
@Configuration @OpenAPIDefinition( info = @Info(title = "My API", version = "v1"), // 关键:添加全局安全要求,绑定你定义的Authorization scheme security = @SecurityRequirement(name = "Authorization") ) @SecurityScheme( name = "Authorization", type = SecuritySchemeType.APIKEY, in = SecuritySchemeIn.HEADER, description = "请输入你的API密钥" // 可以加个描述,提升用户体验 ) public class OpenApiConfig { }
2. 给特定接口/Controller单独启用授权
如果不想全局启用,只需要在需要授权的Controller类或者单个方法上加上@SecurityRequirement注解即可:
@RestController @RequestMapping("/orders") public class OrderController { @GetMapping("/my") // 仅这个接口启用Authorization授权 @SecurityRequirement(name = "Authorization") public ResponseEntity<List<Order>> getMyOrders() { // 业务逻辑实现 return ResponseEntity.ok(new ArrayList<>()); } }
配置完之后再去Swagger UI测试,输入密钥点击Execute,就能看到Authorization请求头被正常发送了。
另外提个小补充:如果之后要切换成Bearer Token(比如JWT),只需要把@SecurityScheme的type改成SecuritySchemeType.HTTP,加上scheme = "bearer"和bearerFormat = "JWT"就行,核心逻辑和APIKEY是一致的。
内容的提问来源于stack exchange,提问作者Peter Kronenberg
相关产品推荐
相关产品推荐

