配置Swagger

集成JWT令牌后,之后调用web方法时,都需要带着令牌。那么就必须要去上传令牌字符串儿。那么就必须要告诉Swagger,提交的请求里边哪一个参数是上传的令牌字符串儿,

需要去创建一个list对象。在里边呢,这个泛型是ApiKEY这样类型的一个对象,那么这个对象里面封装的就是告诉给swagger请求里边哪一个参数是提交上来的令牌字符串儿。把这个对象呢放在list集合里边。对这个list集合再次做一下封装,封装成一个认证的数组,这个认证数组对象呢,还要再次经过这个封装,封装成一个reference对象。放到另外的一个list集合里边。这个list集合还要再次进行封装。封装成一个context上下文儿对象,然后封装到另外的一个list里边,那么这个最后的list才是我们要用到的list。

  • 导入依赖
1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
  • 配置类
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
package com.example.emos.wx.config;

import io.swagger.annotations.ApiOperation;
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.SecurityReference;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.ApiSelectorBuilder;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

// 配置Swagger文档生成的注解
@Configuration
// 启用Swagger2
@EnableSwagger2
public class SwaggerConfig {

/**
* 创建RESTful API的Docket实例
*
* @return Docket实例
*/
@Bean
public Docket createRestApi() {
Docket docket = new Docket(DocumentationType.SWAGGER_2);
// 构建API信息
ApiInfoBuilder Builder = new ApiInfoBuilder();
Builder.title("api接口文档");
ApiInfo apiInfo = Builder.build();
docket.apiInfo(apiInfo);

// 选择API
ApiSelectorBuilder selectorBuilder = docket.select();
// 选择所有路径
selectorBuilder.paths(PathSelectors.any());
// 选择带有ApiOperation注解的方法
//使用@ApiOperation的方法会被提取到REST API中
selectorBuilder.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class));
docket = selectorBuilder.build();

/*
// 下面的语句是开启对JWT的支持,当用户用Swagger调用受JWT认证保护的方法,
//
//必须要先提交参数(例如令牌)
//
// */
// 存储用户必须提交的参数
ApiKey apiKey = new ApiKey("token", "token", "header");
List<ApiKey> apiKeyList = new ArrayList<>();
//规定用户需要输入什么参数
apiKeyList.add(apiKey);
docket.securitySchemes(apiKeyList);

// 设置授权范围
//如果用户JWT认证通过,则在Swagger中全局有效
AuthorizationScope scope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] scopes = {scope};
//存储令牌和作用域
SecurityReference reference = new SecurityReference("token", scopes);
List refList = new ArrayList();
refList.add(reference);
// 设置安全上下文
SecurityContext context = SecurityContext.builder().securityReferences(refList).build();
List cxtList = new ArrayList();
cxtList.add(context);
docket.securityContexts(cxtList);

return docket;
}

}

  • 测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@RestController
@RequestMapping("/test")
@Api("测试接口")
public class testcontroller {


@GetMapping("/sayHello")
@ApiOperation("测试接口")
public R sayHello()
{
return R.ok().put("msg","hello");
}


}