如何使用 openapi-ui 和承载令牌(jwt)在 swagger-ui 中激活授权按钮?
Posted
技术标签:
【中文标题】如何使用 openapi-ui 和承载令牌(jwt)在 swagger-ui 中激活授权按钮?【英文标题】:How to Activate authorization-Button in swagger-ui with openapi-ui and bearer-token (jwt)? 【发布时间】:2021-03-01 00:37:43 【问题描述】:我的任务是在 swagger-ui 站点中启用授权按钮。我使用 springdoc-openapi-ui 依赖项中的 @Operation 或 @ApiResponse 等注释制作 REST-Controller 的文档。现在我应该在 swagger 表面启用授权按钮。
我有以下介绍:https://www.baeldung.com/spring-boot-swagger-jwt 但是在这里我必须将 springfox 包含到我的 maven 依赖项中,但是当我这样做时,我会得到以下异常:
17.11.2020 19:15:46,664 ERROR [o.s.boot.SpringApplication] (main) Application run
failed
java.lang.NoClassDefFoundError: org/springframework/data/rest/webmvc/mapping/Associations
at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3137)
at java.base/java.lang.Class.getDeclaredConstructors(Class.java:2357)
(....)
另外介绍使用apikeys,但我们在应用程序中没有使用apikeys,我不知道如何使用它们。
然后我发现以下问题似乎是我的问题:Enable Authorize button in springdoc-openapi-ui for Bearer Token Authentication (JWT)
所以我从最佳答案中实现了代码:
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
@Configuration
public class OpenApiConfiguration
private final String moduleName;
private final String apiVersion;
public OpenApiConfiguration(
@Value("$module-name") String moduleName,
@Value("$api-version") String apiVersion)
this.moduleName = moduleName;
this.apiVersion = apiVersion;
@Bean
public OpenAPI customOpenAPI()
final String securitySchemeName = "bearerAuth";
final String apiTitle = String.format("%s API", StringUtils.capitalize(moduleName));
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")))
.info(new Info().title(apiTitle)
.version(apiVersion));
但后来我得到以下异常:
17.11.2020 19:21:00,215 ERROR [o.s.boot.SpringApplication] (main) Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'openApiConfiguration' defined in file [<PATH>/configuration/OpenApiConfiguration.class]: Unexpected exception during bean creation; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'module-name' in value "$module-name"
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:530)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
(....)
有人能解释一下这个占位符和@Value 是如何工作的吗? 也许有人对我的问题有更好/更好的方法?我对这个话题很陌生
最好的问候和对不起我的英语不好
我喜欢肥猫
【问题讨论】:
【参考方案1】:关于问题:无法解析值“$module-name”中的占位符“module-name”
也许我误解了这个问题,但这不只是缺少该配置的值吗?如果你只使用字符串常量,它是否有效?
尝试使用这两个属性在类路径上添加属性文件 /yaml,它应该可以工作: 模块名称=xxx api-version=xxx
【讨论】:
以上是关于如何使用 openapi-ui 和承载令牌(jwt)在 swagger-ui 中激活授权按钮?的主要内容,如果未能解决你的问题,请参考以下文章