|
@@ -0,0 +1,129 @@
|
|
|
+package com.gis.common.config;
|
|
|
+
|
|
|
+import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
+import io.swagger.models.auth.In;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+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.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.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Swagger2的接口配置
|
|
|
+ *
|
|
|
+ * @author fdkk
|
|
|
+ */
|
|
|
+@Configuration
|
|
|
+@EnableOpenApi
|
|
|
+@EnableKnife4j
|
|
|
+public class SwaggerConfig {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 是否开启swagger
|
|
|
+ */
|
|
|
+ @Value("${swagger.enabled}")
|
|
|
+ private boolean enabled;
|
|
|
+ /**
|
|
|
+ * title
|
|
|
+ */
|
|
|
+ @Value("${swagger.title}")
|
|
|
+ private String title;
|
|
|
+ /**
|
|
|
+ * version
|
|
|
+ */
|
|
|
+ @Value("${swagger.version}")
|
|
|
+ private String version;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置请求的统一前缀
|
|
|
+ */
|
|
|
+ @Value("${swagger.pathMapping}")
|
|
|
+ private String pathMapping;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建API
|
|
|
+ */
|
|
|
+ @Bean
|
|
|
+ public Docket createRestApi() {
|
|
|
+ return new Docket(DocumentationType.OAS_30)
|
|
|
+ // 是否启用Swagger
|
|
|
+ .enable(enabled)
|
|
|
+ // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
|
|
|
+ .apiInfo(apiInfo())
|
|
|
+ // 设置哪些接口暴露给Swagger展示
|
|
|
+ .select()
|
|
|
+ // 扫描所有有注解的api,用这种方式更灵活
|
|
|
+ .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
|
|
|
+ // 扫描指定包中的swagger注解
|
|
|
+ // .apis(RequestHandlerSelectors.basePackage("com.fdkk.project.tool.swagger"))
|
|
|
+ // 扫描所有 .apis(RequestHandlerSelectors.any())
|
|
|
+ .paths(PathSelectors.any())
|
|
|
+ .build()
|
|
|
+ /* 设置安全模式,swagger可以设置访问token */
|
|
|
+ .securitySchemes(securitySchemes())
|
|
|
+ .securityContexts(securityContexts())
|
|
|
+ .pathMapping(pathMapping);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 安全模式,这里指定token通过Authorization头请求头传递
|
|
|
+ */
|
|
|
+ private List<SecurityScheme> securitySchemes() {
|
|
|
+ List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
|
|
|
+ apiKeyList.add(new ApiKey("token", "token", In.HEADER.toValue()));
|
|
|
+ return apiKeyList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 安全上下文
|
|
|
+ */
|
|
|
+ private List<SecurityContext> securityContexts() {
|
|
|
+ List<SecurityContext> securityContexts = new ArrayList<>();
|
|
|
+ securityContexts.add(
|
|
|
+ SecurityContext.builder()
|
|
|
+ .securityReferences(defaultAuth())
|
|
|
+ .operationSelector(o -> o.requestMappingPattern().matches("/.*"))
|
|
|
+ .build());
|
|
|
+ return securityContexts;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 默认的安全上引用
|
|
|
+ */
|
|
|
+ private List<SecurityReference> defaultAuth() {
|
|
|
+ AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
|
|
|
+ AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
|
|
|
+ authorizationScopes[0] = authorizationScope;
|
|
|
+ List<SecurityReference> securityReferences = new ArrayList<>();
|
|
|
+ securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
|
|
|
+ return securityReferences;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 添加摘要信息
|
|
|
+ */
|
|
|
+ private ApiInfo apiInfo() {
|
|
|
+ // 用ApiInfoBuilder进行定制
|
|
|
+ return new ApiInfoBuilder()
|
|
|
+ // 设置标题
|
|
|
+ .title(title)
|
|
|
+ // 描述
|
|
|
+ .description(title+"描述:接口信息查看...")
|
|
|
+ // 作者信息
|
|
|
+ .contact(new Contact(title, null, null))
|
|
|
+// // 版本
|
|
|
+ .version("版本号:" + version)
|
|
|
+ .build();
|
|
|
+ }
|
|
|
+}
|