From 0b077806196ceb8a68af93f00880ccc70aee50c2 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期四, 07 七月 2022 18:08:14 +0800 Subject: [PATCH] add 整合 springdoc 移除 knife4j --- ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java | 146 +++++++++++------------------------------------- 1 files changed, 34 insertions(+), 112 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java index 8b43f17..c677378 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java @@ -1,131 +1,53 @@ package com.ruoyi.framework.config; -import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; -import com.ruoyi.common.config.RuoYiConfig; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import com.ruoyi.framework.config.properties.SwaggerProperties; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import lombok.RequiredArgsConstructor; +import org.springdoc.core.SpringDocConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 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.*; -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.List; /** - * Swagger2鐨勬帴鍙i厤缃� + * Swagger 鏂囨。閰嶇疆 * * @author Lion Li */ +@RequiredArgsConstructor @Configuration -@EnableSwagger2 -@EnableKnife4j -@ConditionalOnClass({Docket.class, ApiInfoBuilder.class}) -@ConditionalOnProperty(prefix = "swagger", value = "enable", matchIfMissing = true) +@AutoConfigureBefore(SpringDocConfiguration.class) +@ConditionalOnProperty(name = "swagger.enabled", havingValue = "true", matchIfMissing = true) public class SwaggerConfig { - /** - * 绯荤粺鍩虹閰嶇疆 - */ - @Autowired - private RuoYiConfig ruoyiConfig; - /** - * 鏍囬 - */ - @Value("${swagger.title}") - private String title; + private final SwaggerProperties swaggerProperties; - /** - * 鎻忚堪 - */ - @Value("${swagger.description}") - private String description; - - /** - * 鐗堟湰 - */ - @Value("${swagger.version}") - private String version; - - /** - * 鍒涘缓API - */ @Bean - public Docket createRestApi() { - return new Docket(DocumentationType.SWAGGER_2) - // 鐢ㄦ潵鍒涘缓璇PI鐨勫熀鏈俊鎭紝灞曠ず鍦ㄦ枃妗g殑椤甸潰涓紙鑷畾涔夊睍绀虹殑淇℃伅锛� - .apiInfo(apiInfo()) - // 璁剧疆鍝簺鎺ュ彛鏆撮湶缁橲wagger灞曠ず - .select() - // 鎵弿鎵�鏈夋湁娉ㄨВ鐨刟pi锛岀敤杩欑鏂瑰紡鏇寸伒娲� - .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) - // 鎵弿鎸囧畾鍖呬腑鐨剆wagger娉ㄨВ - // .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger")) - // 鎵弿鎵�鏈� .apis(RequestHandlerSelectors.any()) - .paths(PathSelectors.any()) - .build() - /* 璁剧疆瀹夊叏妯″紡锛宻wagger鍙互璁剧疆璁块棶token */ - .securitySchemes(securitySchemes()) - .securityContexts(securityContexts()); + @ConditionalOnMissingBean(OpenAPI.class) + public OpenAPI openApi() { + OpenAPI openApi = new OpenAPI(); + // 鏂囨。鍩烘湰淇℃伅 + SwaggerProperties.InfoProperties infoProperties = swaggerProperties.getInfo(); + Info info = convertInfo(infoProperties); + openApi.info(info); + // 鎵╁睍鏂囨。淇℃伅 + openApi.externalDocs(swaggerProperties.getExternalDocs()); + openApi.tags(swaggerProperties.getTags()); + openApi.paths(swaggerProperties.getPaths()); + openApi.components(swaggerProperties.getComponents()); + + return openApi; } - /** - * 瀹夊叏妯″紡锛岃繖閲屾寚瀹歵oken閫氳繃Authorization澶磋姹傚ご浼犻�� - */ - private List<SecurityScheme> securitySchemes() { - List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>(); - apiKeyList.add(new ApiKey("Authorization", "Authorization", "header")); - return apiKeyList; - } - - /** - * 瀹夊叏涓婁笅鏂� - */ - private List<SecurityContext> securityContexts() { - List<SecurityContext> securityContexts = new ArrayList<>(); - securityContexts.add( - SecurityContext.builder() - .securityReferences(defaultAuth()) - .forPaths(PathSelectors.regex("^(?!auth).*$")) - .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() { - // 鐢ˋpiInfoBuilder杩涜瀹氬埗 - return new ApiInfoBuilder() - // 璁剧疆鏍囬 - .title(title) - // 鎻忚堪 - .description(description) - // 浣滆�呬俊鎭� - .contact(new Contact(ruoyiConfig.getName(), null, null)) - // 鐗堟湰 - .version(version) - .build(); + private Info convertInfo(SwaggerProperties.InfoProperties infoProperties) { + Info info = new Info(); + info.setTitle(infoProperties.getTitle()); + info.setDescription(infoProperties.getDescription()); + info.setContact(infoProperties.getContact()); + info.setLicense(infoProperties.getLicense()); + info.setVersion(infoProperties.getVersion()); + return info; } } -- Gitblit v1.9.3