我有一个像这样的 Swagger 配置
@EnableSwagger2
@Configuration
public class SwaggerConfig {
@Bean
public Docket api() {
List<SecurityScheme> schemeList = new ArrayList<>();
schemeList.add(new ApiKey(HttpHeaders.AUTHORIZATION, "JWT", "header"));
return new Docket(DocumentationType.SWAGGER_2)
.produces(Collections.singleton("application/json"))
.consumes(Collections.singleton("application/json"))
.ignoredParameterTypes(Authentication.class)
.securitySchemes(schemeList)
.useDefaultResponseMessages(false)
.select()
.apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.boot")))
.paths(PathSelectors.any())
.build();
}
}
在 Swagger UI 中,当我单击 Authorize 按钮时,我在值字段 eyJhbGc..nN84qrBg
中输入我的 JWT 令牌。现在我希望我通过 Swagger UI 执行的任何请求都将在标头中包含 JWT。然而,事实并非如此。没有请求包含授权标头。
我错过了什么?
原文由 isADon 发布,翻译遵循 CC BY-SA 4.0 许可协议
原始答案
支持
Authorization: Bearer [JWT_TOKEN]
标头从版本 2.9.2 开始工作将以下依赖项添加到 build.gradle
通过配置 Swagger
通过
http://host:port/<context-root>/swagger-ui.html
访问用户界面按 Authorize all requests 并输入 Bearer [JWT_TOKEN]
瞧,您的下一个请求将具有 JWT 标头
2022-09-24 更新
在一系列较新的项目之后,我开始使用
springdoc-openapi
生成基于javadoc
的文档,从而消除了额外注释的需要。为任何愿意尝试这个库的人写这篇文章。我会推荐它/我是这个库的快乐用户。
依赖项
build.gradle
声明身份验证
使用项目特定的
SecurityConfiguration.java
定义OpenAPI授权的模式。本例:Bearer
在Authorization
在 HTTP 中header
。在 REST 控制器中的使用
SomeController.java
中的用法应参考安全配置配置可达性
/v3/api-docs
swagger-ui
的位置/加载配置swagger-ui
可以对话/src/main/resources/application.yml