package com.jcdm.web.core.config; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.jcdm.common.config.MesConfig; import io.swagger.annotations.ApiOperation; import io.swagger.models.auth.In; 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.Contact; import springfox.documentation.service.SecurityReference; import springfox.documentation.service.SecurityScheme; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.service.contexts.SecurityContext; import springfox.documentation.spring.web.plugins.Docket; /** * Swagger2的接å£é…ç½® * * @author jc */ @Configuration public class SwaggerConfig { /** 系统基础é…ç½® */ @Autowired private MesConfig mesConfig; /** 是å¦å¼€å¯swagger */ @Value("${swagger.enabled}") private boolean enabled; /** 设置请求的统一å‰ç¼€ */ @Value("${swagger.pathMapping}") private String pathMapping; /** * 创建API */ @Bean public Docket createRestApi() { return new Docket(DocumentationType.OAS_30) // 是å¦å¯ç”¨Swagger .enable(enabled) // 用æ¥åˆ›å»ºè¯¥API的基本信æ¯ï¼Œå±•示在文档的页é¢ä¸ï¼ˆè‡ªå®šä¹‰å±•示的信æ¯ï¼‰ .apiInfo(apiInfo()) // è®¾ç½®å“ªäº›æŽ¥å£æš´éœ²ç»™Swagger展示 .select() // æ‰«ææ‰€æœ‰æœ‰æ³¨è§£çš„apiï¼Œç”¨è¿™ç§æ–¹å¼æ›´çµæ´» .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) // æ‰«ææŒ‡å®šåŒ…ä¸çš„swagger注解 // .apis(RequestHandlerSelectors.basePackage("com.jcdm.project.tool.swagger")) // æ‰«ææ‰€æœ‰ .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build() /* 设置安全模å¼ï¼Œswaggerå¯ä»¥è®¾ç½®è®¿é—®token */ .securitySchemes(securitySchemes()) .securityContexts(securityContexts()) .pathMapping(pathMapping); } /** * 安全模å¼ï¼Œè¿™é‡ŒæŒ‡å®štoken通过Authorizationå¤´è¯·æ±‚å¤´ä¼ é€’ */ private List<SecurityScheme> securitySchemes() { List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>(); apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue())); return apiKeyList; } /** * 安全上下文 */ private List<SecurityContext> securityContexts() { List<SecurityContext> securityContexts = new ArrayList<>(); securityContexts.add( SecurityContext.builder() .securityReferences(defaultAuth()) .operationSelector(o -> o.requestMappingPattern().matches("/.*")) .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; } /** * æ·»åŠ æ‘˜è¦ä¿¡æ¯ */ private ApiInfo apiInfo() { // 用ApiInfoBuilder进行定制 return new ApiInfoBuilder() // è®¾ç½®æ ‡é¢˜ .title("æ ‡é¢˜ï¼šæ±Ÿå®¸MES管ç†ç³»ç»Ÿ_æŽ¥å£æ–‡æ¡£") // æè¿° .description("æè¿°ï¼šç”¨äºŽå·¥åŽ‚ç”Ÿäº§çŽ°åœºç®¡ç†") // ä½œè€…ä¿¡æ¯ .contact(new Contact(mesConfig.getName(), null, null)) // 版本 .version("版本å·:" + mesConfig.getVersion()) .build(); } }