如何在 Spring Boot 应用程序中定义 Swagger SecurityScheme

问题描述 投票:0回答:3

我正在尝试将 http 基本身份验证要求定义为我的应用程序的默认要求:

components:
 securitySchemes:
   BasicAuth:
    type: http
    scheme: basic

但是我的 BasicAuth 安全类没有在 swagger.json 文件中生成。

我使用 io.swagger.v3.oas.annotations.security 定义了一个带有 @SecurityScheme 注释的类。

@SecurityScheme(type = SecuritySchemeType.HTTP, name = "basic")
public class BasicAuth {
}

在我的 OpenApi 定义中,我添加了 SecuirtyRequriment:

SecurityRequirement requirement = new SecurityRequirement();
requirement.addList("BasicAuth");
java swagger swagger-codegen
3个回答
3
投票

谢谢你的帖子。我没有意识到您必须通过单独的类添加@SecurityScheme。这对我有用(使用 RESTeasy):

@SecurityScheme(type = SecuritySchemeType.HTTP, name = "BasicAuth", scheme = "basic")
public class BasicAuth {
}

在 javax.ws.rs.core.Application.getSingletons() 的实现中添加此类的实例。

将此注释添加到 REST 方法或实现需要基本身份验证的 REST 方法的类中:

@SecurityRequirement(name = "BasicAuth")

1
投票

所以我发现我做错了什么,我必须使用基本安全方案注释至少一个资源。之后它出现在 Swagger.json 文件中


0
投票

您还可以像这样设置global安全方案(而不是注释每个控制器):

@Bean
public OpenAPI customOpenAPI() {
    return new OpenAPI()
            //defining security scheme
            .components(new Components()
                    .addSecuritySchemes("BearerAuthentication",
                            new SecurityScheme()
                                    .type(SecurityScheme.Type.HTTP)
                                    .scheme("bearer")
                                    .bearerFormat("JWT"))
            )
    //setting global security
    .security(List.of(new SecurityRequirement().addList("BearerAuthentication")))
}

或者使用

OpenAPIDefinition
注释:

@OpenAPIDefinition(security = {@SecurityRequirement(name = "BearerAuthentication") })
© www.soinside.com 2019 - 2024. All rights reserved.