package com.mes.config; import com.google.common.collect.Lists; 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.ParameterBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.schema.ModelRef; import springfox.documentation.service.*; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.service.contexts.SecurityContext; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; import java.util.ArrayList; import java.util.Collections; import java.util.List; import static springfox.documentation.builders.PathSelectors.regex; @Configuration @EnableSwagger2 //开启Swagger2 public class SwaggerConfig { //配置了Swagger的Docket的bean实例 @Bean public Docket docket(){ return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() //加了ApiOperation注解的类,才生成接口文档 .apis(RequestHandlerSelectors.basePackage("com.mes.controller")) //包下的类,才生成接口文档 .paths(PathSelectors.any()) .build() .securitySchemes(securitySchemes()) .securityContexts(securityContexts()); } /** * 配置认证模式 * @return */ private List securitySchemes() { List arrayList = new ArrayList<>(); arrayList.add( new ApiKey("token", "token", "header")); return arrayList; } /** * 配置认证上下文 */ private List securityContexts() { List securityContexts = new ArrayList<>(); securityContexts.add(SecurityContext.builder().securityReferences(defaultAuth()) //过滤要验证的路径 .forPaths(PathSelectors.regex("^(?!auth).*$")) .build()); return securityContexts; } private List defaultAuth() { AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; authorizationScopes[0] = authorizationScope; List securityReferences = new ArrayList<>(); //验证增加(有许多教程说明中这个地方是Authorization,导致不能带入全局token,因为securitySchemes()方法中header写入token,所以这个地方我改为token就可以了) securityReferences.add(new SecurityReference("token", authorizationScopes)); return securityReferences; } //配置Swagger信息 = apiInfo private ApiInfo apiInfo(){ //作者信息 Contact contact = new Contact("郭yj", "", ""); return new ApiInfo( "NorthGlass-ERP 接口文档", //title "郭yj", //description "1.0", //version "urn:tos", contact, "Apache 2.0", "http://www.apache.org/licenses/LICENSE-2.0", new ArrayList()); } }