Как я могу определить 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)))));
    }
}
Другие вопросы по тегам