Реализация конечной точки входа в систему в OpenAPI 3.0 Swagger 3

#java #spring #authentication #openapi #endpoint

Вопрос:

Я использую безопасность Spring конечной точки по умолчанию с помощью фильтра UsernamePasswordAuthenticationFilter. Я хотел бы реализовать эту конечную точку в OpenAPI 3.0. В проекте у меня уже есть эта реализация в Swagger 2.0 (код ниже), и теперь я хочу изменить ее на OpenAPI 3.0. Какой класс я могу использовать вместо ApiListingScanner?

 
import com.google.common.collect.Multimap;
import lombok.SneakyThrows;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Profile;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
//import springfox.documentation.builders.ApiListingBuilder;
//import springfox.documentation.builders.OperationBuilder;
//import springfox.documentation.builders.ParameterBuilder;
//import springfox.documentation.schema.ModelRef;
//import springfox.documentation.service.ApiDescription;
//import springfox.documentation.service.ApiListing;
//import springfox.documentation.service.Operation;
//import springfox.documentation.service.ResponseMessage;
//import springfox.documentation.spring.web.plugins.DocumentationPluginsManager;
//import springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator;
//import springfox.documentation.spring.web.scanners.ApiDescriptionReader;
//import springfox.documentation.spring.web.scanners.ApiListingScanner;
//import springfox.documentation.spring.web.scanners.ApiListingScanningContext;
//import springfox.documentation.spring.web.scanners.ApiModelReader;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

@Primary
@Configuration
@Profile("!prod")
public class SwaggerLoginConfig extends ApiListingScanner {

    public SwaggerLoginConfig(ApiDescriptionReader apiDescriptionReader, ApiModelReader apiModelReader, DocumentationPluginsManager pluginsManager) {
        super(apiDescriptionReader, apiModelReader, pluginsManager);
    }

    @Override
    @SneakyThrows
    public Multimap<String, ApiListing> scan(ApiListingScanningContext context) {
        Multimap<String, ApiListing> def = super.scan(context);

        List<ApiDescription> apis = new LinkedList<>();

        List<Operation> operations = new ArrayList<>();
        operations.add(new OperationBuilder(new CachingOperationNameGenerator())
                .method(HttpMethod.POST)
                .uniqueId("login")
                .parameters(Collections.singletonList(new ParameterBuilder()
                        .name("body")
                        .required(true)
                        .description("The body of request")
                        .parameterType("body")
                        .modelRef(new ModelRef("LoginDto"))
                        .build()))
                .responseMessages(Collections.singleton(new ResponseMessage(200, "Correct Response", new ModelRef("LoginResponseDto"), Collections.emptyMap(), Collections.emptyList())))
                .consumes(Collections.singleton(MediaType.APPLICATION_JSON.toString()))
                .responseModel(new ModelRef("string"))
                .summary("Log in")
                .notes("Here you can log in")
                .build());
        apis.add(new ApiDescription("login", "/api/login", "Authentication documentation", operations, false));

        def.put("authentication", new ApiListingBuilder(context.getDocumentationContext().getApiDescriptionOrdering())
                .apis(apis)
                .description("Custom authentication")
                .build());

        return def;
    }
}
 

Комментарии:

1. вы решили эту проблему? есть какие-нибудь новости?