//package com.malk.config.swagger3; // //import io.swagger.annotations.ApiOperation; //import io.swagger.models.auth.In; //import org.apache.commons.lang3.reflect.FieldUtils; //import org.springframework.boot.SpringBootVersion; //import org.springframework.context.annotation.Bean; //import org.springframework.context.annotation.Configuration; //import org.springframework.context.annotation.Profile; //import org.springframework.util.ReflectionUtils; //import org.springframework.web.servlet.config.annotation.InterceptorRegistration; //import org.springframework.web.servlet.config.annotation.InterceptorRegistry; //import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; //import springfox.documentation.RequestHandler; //import springfox.documentation.builders.ApiInfoBuilder; //import springfox.documentation.builders.PathSelectors; //import springfox.documentation.builders.RequestHandlerSelectors; //import springfox.documentation.oas.annotations.EnableOpenApi; //import springfox.documentation.service.*; //import springfox.documentation.spi.DocumentationType; //import springfox.documentation.spi.service.contexts.SecurityContext; //import springfox.documentation.spring.web.plugins.Docket; // //import java.lang.reflect.Field; //import java.util.*; //import java.util.function.Predicate; // ///** // * swagger3 加载 UI, 添加全局 path // * - // * 路径: http://localhost:9001/dev/swagger-ui/index.html#/ // */ //@Profile({"dev", "local"}) //@Configuration //@EnableOpenApi //public class SwaggerConfiguration implements WebMvcConfigurer { // // private final SwaggerProperties swaggerProperties; // // public SwaggerConfiguration(SwaggerProperties swaggerProperties) { // this.swaggerProperties = swaggerProperties; // } // // /// api bean /// // private Docket _restApi(Predicate apis, Predicate paths) { // return new Docket(DocumentationType.OAS_30) // .enable(swaggerProperties.getEnable()) // 定义是否开启swagger,false为关闭,可以通过变量控制 // .apiInfo(apiInfo()) // 将api的元信息设置为包含在json ResourceListing响应中。 // .host(swaggerProperties.getTryHost()) // 接口调试地址 // .select() // 选择哪些接口作为swagger的doc发布 // .apis(apis) // .paths(PathSelectors.regex("(?!/ApiError.*).*")) // .paths(paths) // .build() // .protocols(newHashSet("https", "http")) // 支持的通讯协议集合 // .securitySchemes(securitySchemes()) // 授权信息设置,必要的header token等认证信息 // .securityContexts(securityContexts()); // 授权信息全局应用 // } // // /** // * 文档说明 // */ // @Bean // public Docket createRestApi() { // return _restApi(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class), PathSelectors.any()) // .groupName("api"); // } // // /** // * 加载全部 // */ // @Bean // public Docket createRestDev() { // return _restApi(RequestHandlerSelectors.basePackage("com.malk"), PathSelectors.any()) // .groupName("dev"); // } // // /** // * API 页面头部信息 // */ // private ApiInfo apiInfo() { // return new ApiInfoBuilder() // .title(swaggerProperties.getApplicationName() + " Api Doc") // .description(swaggerProperties.getApplicationDescription()) // .contact(new Contact("malk", "https://mc.100ali.com/", "pruple_boy@163.com")) // .version("Application Version: " + swaggerProperties.getApplicationVersion() + ", Spring Boot Version: " + SpringBootVersion.getVersion()) // .build(); // } // // /** // * 设置授权信息 // */ // private List securitySchemes() { // ApiKey apiKey = new ApiKey("BASE_TOKEN", "token", In.HEADER.toValue()); // return Collections.singletonList(apiKey); // } // // /** // * 授权信息全局应用 // */ // private List securityContexts() { // return Collections.singletonList( // SecurityContext.builder() // .securityReferences(Collections.singletonList(new SecurityReference("BASE_TOKEN", new AuthorizationScope[]{new AuthorizationScope("global", "")}))) // .build() // ); // } // // @SafeVarargs // private final Set newHashSet(T... ts) { // if (ts.length > 0) { // return new LinkedHashSet<>(Arrays.asList(ts)); // } // return null; // } // // /** // * 通用拦截器排除swagger设置,所有拦截器都会自动加swagger相关的资源排除信息 // */ // @SuppressWarnings("unchecked") // @Override // public void addInterceptors(InterceptorRegistry registry) { // try { // Field registrationsField = FieldUtils.getField(InterceptorRegistry.class, "registrations", true); // List registrations = (List) ReflectionUtils.getField(registrationsField, registry); // if (registrations != null) { // for (InterceptorRegistration interceptorRegistration : registrations) { // interceptorRegistration // .excludePathPatterns("/swagger**/**") // .excludePathPatterns("/webjars/**") // .excludePathPatterns("/v3/**") // .excludePathPatterns("/doc.html"); // } // } // } catch (Exception e) { // e.printStackTrace(); // } // } //}