zhaowenyu
2025-10-20 fc365c426e431a73d116e5d51deaec667f4864de
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
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;
 
    private Docket createApiDocket(ApiGroup apiGroup) {
        return new Docket(DocumentationType.SWAGGER_2)
                .enable(true)
                .groupName(apiGroup.getGroupName())
                .apiInfo(apiInfo(apiGroup.getTitle()))
                .select()
                .apis(requestHandler ->
                        requestHandler.declaringClass().getPackage().getName()
                                .startsWith(apiGroup.getPackagePath()) &&
                                requestHandler.isAnnotatedWith(io.swagger.annotations.ApiOperation.class)
                )
                .paths(PathSelectors.any())
                .build()
                .securitySchemes(securitySchemes())
                .securityContexts(securityContexts());
    }
 
    @Bean
    public Docket systemApi() {
        return createApiDocket(ApiGroup.SYSTEM);
    }
 
    @Bean
    public Docket droneApi() {
        return createApiDocket(ApiGroup.DRONE);
    }
 
    @Bean
    public Docket sampleApi() {
        return createApiDocket(ApiGroup.SAMPLE);
    }
 
    @Bean
    public Docket mediaMTXApi() {
        return createApiDocket(ApiGroup.MEDIA_MTX);
    }
 
    @Bean
    public Docket deviceApi() {
        return createApiDocket(ApiGroup.DEVICE);
    }
 
    @Bean
    public Docket dataApi() {
        return createApiDocket(ApiGroup.DATA);
    }
 
    @Bean
    public Docket storageApi() {
        return createApiDocket(ApiGroup.STORAGE);
    }
 
    @Bean
    public Docket routeApi() {
        return createApiDocket(ApiGroup.ROUTE);
    }
 
    /**
     * 安全模式,这里指定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();
    }
}