Проверка подлинности Spring Boot Swagger с помощью apikey - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь установить ключ API для swagger для защиты моих API.

Ниже приведен код, который у меня есть:

import com.google.common.base.Predicates;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import springfox.documentation.builders.*;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.Collections;
import java.util.List;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Value("${version.number}")
    private String version;

    @Bean
    public Docket api() {

        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.boot")))
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo())
                .securitySchemes(Collections.singletonList(apiKey()))
                .securityContexts(Collections.singletonList(securityContext()));
    }

    private ApiInfo apiInfo() {

        return new ApiInfoBuilder()
                .title("My API")
                .description("My API Documentation")
                .version(version)
                .build();
    }

    private SecurityContext securityContext() {
        return SecurityContext.builder().securityReferences(defaultAuth()).forPaths(PathSelectors.regex("/.*")).build();
    }

    private List<SecurityReference> defaultAuth() {
        final AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        final AuthorizationScope[] authorizationScopes = new AuthorizationScope[]{authorizationScope};
        return Collections.singletonList(new SecurityReference("APIKey", authorizationScopes));
    }

    private ApiKey apiKey() {
        return new ApiKey("APIKey", "APIKey", "header");
    }
}

На рисунке ниже показан пользовательский интерфейс. Я могу поразить любой API любым ключом API или даже когда я ничего не введу, я все равно получу доступ к API. Я хотел бы установить ключ в коде, может быть, в файле свойств, а затем настроить его в swagger так, чтобы каждый раз, когда я пытаюсь получить доступ к API, они указывали указанный мной apikey.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...