配置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"); }
}
|