package com.xzx.gc.config; import com.google.common.collect.Lists; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import org.springframework.http.HttpHeaders; 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.swagger.web.ApiKeyVehicle; import springfox.documentation.swagger.web.SecurityConfiguration; import springfox.documentation.swagger2.annotations.EnableSwagger2; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; /** * @author: zhongzan * @create: 2019-06-19 17:06 * @description: */ @Configuration @EnableSwagger2 @Profile(value = {"dev","test","check"}) public class SwaggerConfig { @Value("${info.app.name}") private String appName; @Bean public Docket createRestApi() { List aParameters=getParas(); Docket docket = new Docket(DocumentationType.SWAGGER_2) .groupName(appName) .apiInfo(apiInfo(appName)) //不使用swagger默认状态码 .useDefaultResponseMessages(false) //设置自定义异常 // .globalResponseMessage(RequestMethod.POST,responseMessageList) .select() .apis(RequestHandlerSelectors.basePackage("com.xzx.gc")) //指定需要生成的文档的接口的路径 // .paths(PathSelectors.regex("/(third|upgradeRecord|user|accountInfo|income|withdrawal).*")) .paths(PathSelectors.any()) .build().globalOperationParameters(aParameters); //设置token验证 docket.securitySchemes(Lists.newArrayList(apiKey())); //指定路径需要验证 docket.securityContexts(Lists.newArrayList(securityContext())); //全局忽略参数类型 docket.ignoredParameterTypes(HttpServletRequest.class, HttpServletResponse.class); return docket; } /** * 设置公共参数 * @return */ private List getParas(){ List aParameters = new ArrayList(); ParameterBuilder aParameterBuilder = new ParameterBuilder(); aParameterBuilder.name("swagger").description("系统参数:swagger模式不拦截").defaultValue("true").modelRef(new ModelRef("String")).parameterType("header").required(true).build(); aParameters.add(aParameterBuilder.build()); aParameterBuilder = new ParameterBuilder(); aParameterBuilder.name("version").description("系统参数:版本号").defaultValue("v2.1").modelRef(new ModelRef("String")).parameterType("header").required(true).build(); aParameters.add(aParameterBuilder.build()); aParameterBuilder = new ParameterBuilder(); aParameterBuilder.name("userId").description("系统参数:用户ID").defaultValue("USER1255012451226095616").modelRef(new ModelRef("String")).parameterType("header").required(true).build(); aParameters.add(aParameterBuilder.build()); return aParameters; } private SecurityContext securityContext() { return SecurityContext.builder() .securityReferences(defaultAuth()) //指定需要Token验证的文档的接口的路径 .forPaths(PathSelectors.any()) .build(); } List defaultAuth() { AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; authorizationScopes[0] = authorizationScope; return Lists.newArrayList( new SecurityReference(HttpHeaders.AUTHORIZATION, authorizationScopes)); } @Bean SecurityConfiguration security() { return new SecurityConfiguration( null, null, null, // realm Needed for authenticate button to work null, // appName Needed for authenticate button to work "BEARER ",// apiKeyValue ApiKeyVehicle.HEADER, HttpHeaders.AUTHORIZATION, //apiKeyName null); } private ApiInfo apiInfo(String desc) { return new ApiInfoBuilder() .title("小棕熊") .description(desc) .termsOfServiceUrl("") .contact(new Contact("钟赞","","zan7755@qq.com")) .version("1.0") .build(); } private ApiKey apiKey() { return new ApiKey(HttpHeaders.AUTHORIZATION, "token", "header"); } }