Как я могу определить tokenURL, который будет генерировать "Абсолютный" URL-адрес аутентификации в соответствии с выбором пользователем "хоста" из списка хостов в пользовательском интерфейсе Swagger?
У меня есть приложение для весенней загрузки, для которого я пытаюсь создать открытые документы API 3.0, и для этого я использую springdoc lib. Я использую аннотации для документирования различных частей приложения и, в конце концов, хочу автоматически сгенерировать документацию. Я использую аннотации для всей документации, и мне немного сложно воспроизвести аналогичные вещи, перечисленные в yaml/json из официальной документации springdocs. У меня есть несколько экземпляров приложения, и я буду загружать документацию по всем из них в единый открытый интерфейс API. Для нескольких хостов я определил их примерно так:
@OpenAPIDefinition(
info = @Info(
title = "Title",
version = "v1",
description = "Desc",
),
servers = {
@Server(
url = "https://server-1.com",
description = "Server 1"
),
@Server(
url = "https://server-2.com",
description = "Server 2"
),
@Server(
url = "https://server-3.com",
description = "Server 3"
)
}
)
@SecurityScheme(name = "security_auth", type = SecuritySchemeType.OAUTH2,
flows = @OAuthFlows(authorizationCode =
@OAuthFlow(tokenUrl = "v1/authenticate")))
public class OpenAPIConfig {}
Теперь проблема для меня в том, что URL-адрес toeken отображается так, как определено выше, целиком. Я хочу определить абсолютный URL-адрес, который будет обновляться в соответствии с выбором пользователя. Например, https://server-3.com/v1/authenticate. Как это сделать в аннотациях?
0 ответов
Вы должны объявить 3 разных SecurityScheme для своего образца. Обратите внимание, что все URL-адреса / пути сервера также могут быть получены из файла конфигурации.
Вот пример кода, как вы можете достичь своей цели:
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.OAuthFlow;
import io.swagger.v3.oas.models.security.OAuthFlows;
import io.swagger.v3.oas.models.security.SecurityScheme.Type;
import io.swagger.v3.oas.models.servers.Server;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class OpenAPIConfig {
@Bean
public OpenAPI openAPIDef() {
String serverUrl1 = "https://server-1.com";
String serverUrl2 = "https://server-2.com";
String serverUrl3 = "https://server-3.com";
String suffix = "/v1/authenticate";
return new OpenAPI().info(new Info().title("Title").version("v1"))
.addServersItem(new Server().url(serverUrl1))
.addServersItem(new Server().url(serverUrl2))
.addServersItem(new Server().url(serverUrl3))
.components(new Components()
.addSecuritySchemes("security_auth_server1",
new io.swagger.v3.oas.models.security.SecurityScheme()
.type(Type.OAUTH2)
.flows(new OAuthFlows().authorizationCode(new OAuthFlow().tokenUrl(serverUrl1 + suffix))))
.addSecuritySchemes("security_auth_server2",
new io.swagger.v3.oas.models.security.SecurityScheme()
.type(Type.OAUTH2)
.flows(new OAuthFlows().authorizationCode(new OAuthFlow().tokenUrl(serverUrl2 + suffix))))
.addSecuritySchemes("security_auth_server3",
new io.swagger.v3.oas.models.security.SecurityScheme()
.type(Type.OAUTH2)
.flows(new OAuthFlows().authorizationCode(new OAuthFlow().tokenUrl(serverUrl3 + suffix)))));
}
}