package cn.cetc54.platform.config.swagger; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; 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.ArrayList; import java.util.List; /** * */ @Slf4j @Configuration @EnableSwagger2 public class Swagger2Config { @Value("${swagger.title:Platform}") private String title; @Value("${swagger.description:Api Documentation}") private String description; @Value("${swagger.version:1.0}") private String version; @Value("${swagger.termsOfServiceUrl:http://xxx}") private String termsOfServiceUrl; @Value("${swagger.contact.name:xx}") private String name; @Value("${swagger.contact.url:http://xx}") private String url; @Value("${swagger.contact.email:xx}") private String email; private List securitySchemes() { List apiKeys = new ArrayList<>(); apiKeys.add(new ApiKey("Authorization", "accessToken", "header")); return apiKeys; } private List securityContexts() { List securityContexts = new ArrayList<>(); securityContexts.add(SecurityContext.builder() .securityReferences(defaultAuth()) .forPaths(PathSelectors.regex("^(?!auth).*$")).build()); return securityContexts; } private List defaultAuth() { AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; authorizationScopes[0] = authorizationScope; List securityReferences = new ArrayList<>(); securityReferences.add(new SecurityReference("Authorization", authorizationScopes)); return securityReferences; } @Bean public Docket createRestApi() { log.info("加载Swagger2"); return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()).select() // 扫描所有有注解的api,用这种方式更灵活 .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) .paths(PathSelectors.any()) .build() .securitySchemes(securitySchemes()) .securityContexts(securityContexts()); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title(title) .description(description) .termsOfServiceUrl(termsOfServiceUrl) .contact(new Contact(name, url, email)) .version(version) .build(); } }