Swagger2Config.java 3.46 KB
Newer Older
yuquan.zhu committed
1 2
package cn.timer.api.config.swagger;

3 4 5
import java.util.ArrayList;
import java.util.List;

yuquan.zhu committed
6 7
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
8
import org.springframework.context.annotation.Import;
yuquan.zhu committed
9

10
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
yuquan.zhu committed
11

12
import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
yuquan.zhu committed
13 14 15 16
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
17 18 19
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.AuthorizationScope;
import springfox.documentation.service.SecurityReference;
yuquan.zhu committed
20
import springfox.documentation.spi.DocumentationType;
21
import springfox.documentation.spi.service.contexts.SecurityContext;
yuquan.zhu committed
22 23
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
24 25 26 27 28

@Configuration // 声明为配置文件,让spring加载
@EnableSwagger2 // 支持swagger2插件配置
@EnableKnife4j
@Import(BeanValidatorPluginsConfiguration.class)
yuquan.zhu committed
29
public class Swagger2Config {
30 31 32

	// apiInfo对象主要是设置我们api文档的标题,描述,访问的地址,创建者等信息
	@SuppressWarnings("deprecation")
yuquan.zhu committed
33
	@Bean
34
	public ApiInfo apiInfo() {
35 36 37 38
		return new ApiInfoBuilder()
				.title("8小时-Api接口文档")
				.description("快速进行Api接口调试")
				.termsOfServiceUrl("127.0.0.1:8080")
ilal committed
39
				.contact("subject")
40 41
				.version("1.0")
				.build();
42 43 44 45 46
	}

	/**
	 * 创建API
	 */
47
	@Bean
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
	public Docket createRestApi() {
		return new Docket(DocumentationType.SWAGGER_2)
				// .pathMapping("/dev-api")
				// 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
				.apiInfo(apiInfo())
				// 设置哪些接口暴露给Swagger展示
				.select()
				// 扫描所有有注解的api,用这种方式更灵活
				// .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
				// 扫描指定包中的swagger注解
				.apis(RequestHandlerSelectors.basePackage("cn.timer.api"))
				// 扫描所有 .apis(RequestHandlerSelectors.any())
				.paths(PathSelectors.any()).build()
				/* 设置安全模式,swagger可以设置访问token */
				.securitySchemes(securitySchemes()).securityContexts(securityContexts());
	}

	/**
	 * 安全模式,这里指定token通过Authorization头请求头传递
	 */
	private List<ApiKey> securitySchemes() {
		List<ApiKey> apiKeyList = new ArrayList<ApiKey>();
		apiKeyList.add(new ApiKey("Authorization", "Authorization", "header"));
		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;
	}

yuquan.zhu committed
96
}