SwaggerConfig.java
4.17 KB
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
package com.infoloop.tianting.config;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import com.infoloop.tianting.constant.CommonConstants;
import io.swagger.models.auth.In;
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.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;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@Configuration
@EnableKnife4j
@EnableSwagger2WebMvc
public class SwaggerConfig {
public static final String[] SWAGGER_WHITELIST = {
"/swagger-resources",
"/swagger-ui/**",
"/swagger-ui/index.html",
"/swagger-ui.html",
"/swagger-ui.html/**",
"/v2/api-docs",
"/v3/api-docs",
"/v3/api-docs/**",
"/doc.html"
};
/*引入Knife4j提供的扩展类*/
// private final OpenApiExtensionResolver openApiExtensionResolver;
// @Autowired
// public SwaggerConfig(OpenApiExtensionResolver openApiExtensionResolver) {
// this.openApiExtensionResolver = openApiExtensionResolver;
// }
@Bean
public Docket docketApp() {
final var groupName = "后台接口";
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName(groupName)
.select()
.apis(RequestHandlerSelectors.basePackage("com.infoloop.tianting.controller").or(RequestHandlerSelectors.basePackage("com.infoloop.tianting.streamController")))
.paths(PathSelectors.any())
.build()
//赋予插件体系
// .extensions(openApiExtensionResolver.buildExtensions(groupName))
.protocols(newHashSet("https", "http"))
.securitySchemes(securitySchemes())
.securityContexts(securityContexts());
}
/**
* 设置授权信息
*/
private List<SecurityScheme> securitySchemes() {
final var apiKey = new ApiKey(CommonConstants.AUTHORIZATION, CommonConstants.AUTHORIZATION, In.HEADER.toValue());
return Collections.singletonList(apiKey);
}
/**
* 授权信息全局应用
*/
private List<SecurityContext> securityContexts() {
return Collections.singletonList(
SecurityContext.builder()
.securityReferences(Collections.singletonList(new SecurityReference(CommonConstants.AUTHORIZATION, new AuthorizationScope[]{new AuthorizationScope("global", "accessEverything")})))
//设置需要登录认证的路径,非login开头的都需要Token认证
// .forPaths(PathSelectors.regex("^(?!login).*$"))
.build()
);
}
@SafeVarargs
private <T> Set<T> newHashSet(T... ts) {
if (ts.length > 0) {
return new LinkedHashSet<>(Arrays.asList(ts));
}
return null;
}
/**
* 添加摘要信息
*/
private ApiInfo apiInfo() {
// 用ApiInfoBuilder进行定制
return new ApiInfoBuilder()
// 设置标题
.title("灵芝云系统")
// 描述
.description("物流商后台项目接口文档")
// 作者信息
.contact(new Contact("INFO_LOOP", null, null))
// 版本
.version("V1.0")
.build();
}
}