我正在尝试将 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");
谢谢你的帖子。我没有意识到您必须通过单独的类添加@SecurityScheme。这对我有用(使用 RESTeasy):
@SecurityScheme(type = SecuritySchemeType.HTTP, name = "BasicAuth", scheme = "basic")
public class BasicAuth {
}
在 javax.ws.rs.core.Application.getSingletons() 的实现中添加此类的实例。
将此注释添加到 REST 方法或实现需要基本身份验证的 REST 方法的类中:
@SecurityRequirement(name = "BasicAuth")
所以我发现我做错了什么,我必须使用基本安全方案注释至少一个资源。之后它出现在 Swagger.json 文件中
您还可以像这样设置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") })