当前位置: 首页 > 知识库问答 >
问题:

如何使用openapi ui和承载令牌(jwt)在swagger ui中激活授权按钮?

毛宏达
2023-03-14

我的任务是在swagger-ui站点中启用授权按钮。我做了REST-Controller的留档,带有来自springdoc-openapi-ui-依赖项的@操作或@Api响应等注释。现在我应该在昂首阔步的表面启用授权按钮。

我有以下介绍: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)
(....)

另外,介绍中使用了apikey,但我们在应用程序中不使用apikey,我不知道如何使用它们。

然后,我发现了以下问题,这似乎是我的问题:springdoc openapi ui中用于承载令牌身份验证(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个答案

祖波光
2023-03-14

关于问题:无法解决占位符'模块名称'中的值"${模块名称}"

也许我误解了这个问题,但这不只是缺少该配置的值吗?它的工作原理,如果你只是使用字符串常量?

尝试在类路径上添加一个属性文件 /yaml这两个属性,它应该可以工作:模块名称=xxx api-version=xxx

 类似资料:
  • 我有一个Web api终端,它给我JWT令牌。它不是一个完全授权的服务器。它只是可以生成一个JWT令牌。 现在我有另一个用 aspnet 核心编写的 Web 应用程序。其中在启动中.cs我添加了以下行,以便我可以使用收到的 JWT 令牌进行授权 我也有一个登录表单(在web应用程序中),用户输入用户名和密码,我发送到web api并获得令牌。为了保护web应用程序中的任何控制器,我只使用了[Aut

  • 如何在springdoc-openapi-ui(openapi3.0)中启用“authorize”按钮以进行承载令牌身份验证,例如JWT。 必须向Spring和类添加哪些注释?

  • 是否可以使用来自Google API客户端Javascript库的承载令牌来授权Google云存储桶,而无需向用户请求https://www.googleapis.com/auth/devstorage范围。该桶具有对所有Google帐户的读写访问权限。

  • 当一个人试图使用azure AD承载令牌访问我们的系统时,这个获取和缓存资源令牌的工作流程是不存在的。 所以我的问题是,我如何使用承载令牌来启用它?如何才能像使用OpenIDConnect一样请求额外的资源令牌?是否可以使用ADAL从承载令牌获取授权代码?

  • 寻求有关如何进行微服务授权的建议。 我使用spring/spring boot来提供所有的微服务 在使用JWT令牌到达实际微服务之前,我可以通过Spring Cloud网关进行身份验证,但是在授权方面,我不确定如何做到这一点。 我想在内部处理business microservice中每个endpoint的授权。 有没有办法将JWT令牌传递给微服务,或者我需要调用authserver来获取用户中的

  • 有两个ASP.NET核心Web API使用承载令牌身份验证。这些服务还提供静态文件,这些文件用于同意API进入消费应用程序的目录。所以这两个API都在Azure AD中启用了隐式流。 API2使用jwt-barer授权从Web API控制器调用API1。API2具有访问API1的权限。 来自第三个目录的用户导航到API2服务的SPA。用户被重定向到Azure AD,登录并同意API。用户被重定向回