package com.billion.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.billion.common.config.RuoYiConfig; 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 ruoyi */ @Configuration public class SwaggerConfig { /** 系统基础é…ç½® */ @Autowired private RuoYiConfig ruoyiConfig; /** 是å¦å¼€å¯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.billion.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("æ ‡é¢˜ï¼šè‹¥ä¾ç®¡ç†ç³»ç»Ÿ_接å£æ–‡æ¡£") // æè¿° .description("æ述:用于管ç†é›†å›¢æ——下公å¸çš„人员信æ¯,具体包括XXX,XXX模å—...") // ä½œè€…ä¿¡æ¯ .contact(new Contact(ruoyiConfig.getName(), null, null)) // 版本 .version("版本å·:" + ruoyiConfig.getVersion()) .build(); } }