gpt4 book ai didi

java - Springdoc 指定安全性为开放

转载 作者:行者123 更新时间:2023-12-04 15:12:07 25 4
gpt4 key购买 nike

我正在使用 Springdoc (1.4.8) 来记录我们的 Rest API。 99% 的调用使用 OAuth2 Bearer Token 进行保护,所以我想像这样默认添加它:

new OpenAPI()
.components(new Components()
.addSecuritySchemes("bearerTokenScheme",
new SecurityScheme()
.type(SecurityScheme.Type.HTTP)
.name("bearerTokenScheme")
.scheme("Bearer")
.bearerFormat("JWT")
)
)
.addSecurityItem(new SecurityRequirement()
.addList("bearerTokenScheme")
)

默认情况下指定它可以正常工作,但我现在的问题是,我可以通过将单个调用指定为不安全来以某种方式否决它吗?

我确实意识到省略 .addSecurityItem() 会默认将调用显示为不安全,但我希望默认情况下保护它们并且必须覆盖它在不安全的时候。

最佳答案

我有一个类似的问题,我已经使用插件解决了它。该插件覆盖标记 Controller 或方法的 security 值并将其设置为空列表。因此标记的端点仍然不安全。

@Component
public class NoSecurityPlugin implements OpenApiCustomiser {

private static final List<Function<PathItem, Operation>> OPERATION_GETTERS = Arrays.asList(
PathItem::getGet, PathItem::getPost, PathItem::getPut, PathItem::getDelete,
PathItem::getHead, PathItem::getOptions, PathItem::getPatch);

private static final List<String> tagsForNoSecurity = List.of(
"public", "unsecured"
);

@Override
public void customise(OpenAPI openApi) {
openApi.getPaths().forEach((path, item) -> getOperations(item).forEach(api -> {
List<String> tags = api.getTags();
if(tags != null && tags.stream().anyMatch(tagsForNoSecurity::contains)) {
api.setSecurity(Collections.emptyList());
}
}));
}

private static Stream<Operation> getOperations(PathItem pathItem) {
return OPERATION_GETTERS.stream()
.map(g -> g.apply(pathItem))
.filter(Objects::nonNull);
}
}

标记您的 API 方法(或 Controller):

@Tag(name = "public", description = "Public APIs")

关于java - Springdoc 指定安全性为开放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65033183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com