package com.ard.web.core.config;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import com.ard.common.config.UavConfig;
|
import io.swagger.annotations.ApiOperation;
|
import io.swagger.models.auth.In;
|
import springfox.documentation.builders.ApiInfoBuilder;
|
import springfox.documentation.builders.PathSelectors;
|
import springfox.documentation.builders.RequestHandlerSelectors;
|
import springfox.documentation.service.ApiInfo;
|
import springfox.documentation.service.ApiKey;
|
import springfox.documentation.service.AuthorizationScope;
|
import springfox.documentation.service.Contact;
|
import springfox.documentation.service.SecurityReference;
|
import springfox.documentation.service.SecurityScheme;
|
import springfox.documentation.spi.DocumentationType;
|
import springfox.documentation.spi.service.contexts.SecurityContext;
|
import springfox.documentation.spring.web.plugins.Docket;
|
|
/**
|
* Swagger2的接口配置
|
*
|
* @author ruoyi
|
*/
|
@Configuration
|
public class SwaggerConfig
|
{
|
/** 系统基础配置 */
|
@Autowired
|
private UavConfig uavConfig;
|
|
/**
|
* 创建API
|
*/
|
@Bean
|
public Docket systemApi() {
|
return new Docket(DocumentationType.SWAGGER_2)
|
.enable(true)
|
.groupName("系统接口") // 分组名
|
.apiInfo(apiInfo("系统接口"))
|
.select()
|
// 扫描指定包下,但只扫描加了 @ApiOperation 注解的方法
|
.apis(requestHandler ->
|
requestHandler.declaringClass().getPackage().getName().startsWith("com.ard.web.controller.system") &&
|
requestHandler.isAnnotatedWith(io.swagger.annotations.ApiOperation.class)
|
)
|
.paths(PathSelectors.any())
|
.build()
|
/* 设置安全模式,swagger可以设置访问token */
|
.securitySchemes(securitySchemes())
|
.securityContexts(securityContexts());
|
}
|
@Bean
|
public Docket droneApi() {
|
return new Docket(DocumentationType.SWAGGER_2)
|
.enable(true)
|
.groupName("无人机接口") // 分组名
|
.apiInfo(apiInfo("无人机管理接口"))
|
.select()
|
// 扫描指定包下,但只扫描加了 @ApiOperation 注解的方法
|
.apis(requestHandler ->
|
requestHandler.declaringClass().getPackage().getName().startsWith("com.ard.web.controller.work") &&
|
requestHandler.isAnnotatedWith(io.swagger.annotations.ApiOperation.class)
|
)
|
.paths(PathSelectors.any())
|
.build()
|
/* 设置安全模式,swagger可以设置访问token */
|
.securitySchemes(securitySchemes())
|
.securityContexts(securityContexts());
|
}
|
@Bean
|
public Docket sampleApi() {
|
return new Docket(DocumentationType.SWAGGER_2)
|
.enable(true)
|
.groupName("机场接口") // 分组名
|
.apiInfo(apiInfo("机场管理接口"))
|
.select()
|
// 扫描指定包下,但只扫描加了 @ApiOperation 注解的方法
|
.apis(requestHandler ->
|
requestHandler.declaringClass().getPackage().getName().startsWith("com.ard.web.controller" +
|
".sample") &&
|
requestHandler.isAnnotatedWith(io.swagger.annotations.ApiOperation.class)
|
)
|
.paths(PathSelectors.any())
|
.build()
|
/* 设置安全模式,swagger可以设置访问token */
|
.securitySchemes(securitySchemes())
|
.securityContexts(securityContexts());
|
}
|
@Bean
|
public Docket mediaMTXApi() {
|
return new Docket(DocumentationType.SWAGGER_2)
|
.enable(true)
|
.groupName("流媒体接口") // 分组名
|
.apiInfo(apiInfo("流媒体管理接口"))
|
.select()
|
// 扫描指定包下,但只扫描加了 @ApiOperation 注解的方法
|
.apis(requestHandler ->
|
requestHandler.declaringClass().getPackage().getName().startsWith("com.ard.web.controller" +
|
".vtdu") &&
|
requestHandler.isAnnotatedWith(io.swagger.annotations.ApiOperation.class)
|
)
|
.paths(PathSelectors.any())
|
.build()
|
/* 设置安全模式,swagger可以设置访问token */
|
.securitySchemes(securitySchemes())
|
.securityContexts(securityContexts());
|
}
|
@Bean
|
public Docket deviceApi() {
|
return new Docket(DocumentationType.SWAGGER_2)
|
.enable(true)
|
.groupName("设备接口") // 分组名
|
.apiInfo(apiInfo("设备管理接口"))
|
.select()
|
// 扫描指定包下,但只扫描加了 @ApiOperation 注解的方法
|
.apis(requestHandler ->
|
requestHandler.declaringClass().getPackage().getName().startsWith("com.ard.web.controller" +
|
".device") &&
|
requestHandler.isAnnotatedWith(io.swagger.annotations.ApiOperation.class)
|
)
|
.paths(PathSelectors.any())
|
.build()
|
/* 设置安全模式,swagger可以设置访问token */
|
.securitySchemes(securitySchemes())
|
.securityContexts(securityContexts());
|
}
|
@Bean
|
public Docket dataApi() {
|
return new Docket(DocumentationType.SWAGGER_2)
|
.enable(true)
|
.groupName("数据接口") // 分组名
|
.apiInfo(apiInfo("数据管理接口"))
|
.select()
|
// 扫描指定包下,但只扫描加了 @ApiOperation 注解的方法
|
.apis(requestHandler ->
|
requestHandler.declaringClass().getPackage().getName().startsWith("com.ard.web.controller" +
|
".data") &&
|
requestHandler.isAnnotatedWith(io.swagger.annotations.ApiOperation.class)
|
)
|
.paths(PathSelectors.any())
|
.build()
|
/* 设置安全模式,swagger可以设置访问token */
|
.securitySchemes(securitySchemes())
|
.securityContexts(securityContexts());
|
}
|
@Bean
|
public Docket storageApi() {
|
return new Docket(DocumentationType.SWAGGER_2)
|
.enable(true)
|
.groupName("存储接口") // 分组名
|
.apiInfo(apiInfo("存储管理接口"))
|
.select()
|
// 扫描指定包下,但只扫描加了 @ApiOperation 注解的方法
|
.apis(requestHandler ->
|
requestHandler.declaringClass().getPackage().getName().startsWith("com.ard.web.controller" +
|
".storage") &&
|
requestHandler.isAnnotatedWith(io.swagger.annotations.ApiOperation.class)
|
)
|
.paths(PathSelectors.any())
|
.build()
|
/* 设置安全模式,swagger可以设置访问token */
|
.securitySchemes(securitySchemes())
|
.securityContexts(securityContexts());
|
}
|
/**
|
* 安全模式,这里指定token通过Authorization头请求头传递
|
*/
|
private List<SecurityScheme> securitySchemes()
|
{
|
List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
|
apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue()));
|
return apiKeyList;
|
}
|
|
/**
|
* 安全上下文
|
*/
|
private List<SecurityContext> securityContexts()
|
{
|
List<SecurityContext> securityContexts = new ArrayList<>();
|
securityContexts.add(
|
SecurityContext.builder()
|
.securityReferences(defaultAuth())
|
.forPaths(PathSelectors.regex("^(?!auth).*$"))
|
.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("无人机系统_接口文档")
|
// 描述
|
.description("无人机系统接口")
|
// 作者信息
|
.contact(new Contact(uavConfig.getName(), null, null))
|
// 版本
|
.version(uavConfig.getVersion())
|
.build();
|
}
|
private ApiInfo apiInfo(String title) {
|
return new ApiInfoBuilder()
|
.title(title)
|
.description("API 文档")
|
.version("1.0")
|
.build();
|
}
|
}
|