From a6521cb0c0c13483621de754fbc93eee3ba1e7e5 Mon Sep 17 00:00:00 2001 From: lengleng Date: Sun, 11 Apr 2021 14:24:53 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20Introducing=20new=20features.=20#2?= =?UTF-8?q?613=20=E3=80=90swagger=20/knife4j=E3=80=91=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=BC=80=E5=85=B3=E5=B1=8F=E8=94=BD=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GatewaySwaggerAutoConfiguration.java | 32 +++++++++++++------ .../config/SwaggerAutoConfiguration.java | 22 ++++++------- .../SwaggerProperties.java | 6 ++-- .../swagger/support/SwaggerProvider.java | 3 +- 4 files changed, 38 insertions(+), 25 deletions(-) rename pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/{config => support}/SwaggerProperties.java (95%) diff --git a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/GatewaySwaggerAutoConfiguration.java b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/GatewaySwaggerAutoConfiguration.java index 5c5d026bc..dd755fe4b 100644 --- a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/GatewaySwaggerAutoConfiguration.java +++ b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/GatewaySwaggerAutoConfiguration.java @@ -1,5 +1,6 @@ package com.pig4cloud.pigx.common.swagger.config; +import com.pig4cloud.pigx.common.swagger.support.SwaggerProperties; import com.pig4cloud.pigx.common.swagger.support.SwaggerResourceHandler; import com.pig4cloud.pigx.common.swagger.support.SwaggerSecurityHandler; import com.pig4cloud.pigx.common.swagger.support.SwaggerUiHandler; @@ -8,9 +9,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplicat import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.http.MediaType; -import org.springframework.web.reactive.function.server.RequestPredicates; -import org.springframework.web.reactive.function.server.RouterFunction; -import org.springframework.web.reactive.function.server.RouterFunctions; +import org.springframework.web.reactive.function.server.*; /** * @author lengleng @@ -29,6 +28,8 @@ public class GatewaySwaggerAutoConfiguration { private final SwaggerUiHandler swaggerUiHandler; + private final SwaggerProperties swaggerProperties; + @Bean public WebFluxSwaggerConfiguration fluxSwaggerConfiguration() { return new WebFluxSwaggerConfiguration(); @@ -36,13 +37,24 @@ public class GatewaySwaggerAutoConfiguration { @Bean public RouterFunction swaggerRouterFunction() { - return RouterFunctions - .route(RequestPredicates.GET("/swagger-resources").and(RequestPredicates.accept(MediaType.ALL)), - swaggerResourceHandler) - .andRoute(RequestPredicates.GET("/swagger-resources/configuration/ui") - .and(RequestPredicates.accept(MediaType.ALL)), swaggerUiHandler) - .andRoute(RequestPredicates.GET("/swagger-resources/configuration/security") - .and(RequestPredicates.accept(MediaType.ALL)), swaggerSecurityHandler); + // 开启swagger 正常执行路由 + if (swaggerProperties.getEnabled()) { + return RouterFunctions + .route(RequestPredicates.GET("/swagger-resources").and(RequestPredicates.accept(MediaType.ALL)), + swaggerResourceHandler) + .andRoute(RequestPredicates.GET("/swagger-resources/configuration/ui") + .and(RequestPredicates.accept(MediaType.ALL)), swaggerUiHandler) + .andRoute(RequestPredicates.GET("/swagger-resources/configuration/security") + .and(RequestPredicates.accept(MediaType.ALL)), swaggerSecurityHandler); + } + else { + // 关闭时,返回404 + return RouterFunctions + .route(RequestPredicates.GET("/swagger-ui/**").and(RequestPredicates.accept(MediaType.ALL)), + serverRequest -> ServerResponse.notFound().build()) + .andRoute(RequestPredicates.GET("/doc.html").and(RequestPredicates.accept(MediaType.ALL)), + serverRequest -> ServerResponse.notFound().build()); + } } } diff --git a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/SwaggerAutoConfiguration.java b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/SwaggerAutoConfiguration.java index 0b88ea39d..c386b1249 100644 --- a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/SwaggerAutoConfiguration.java +++ b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/SwaggerAutoConfiguration.java @@ -16,8 +16,9 @@ */ package com.pig4cloud.pigx.common.swagger.config; +import com.pig4cloud.pigx.common.swagger.support.SwaggerProperties; +import lombok.RequiredArgsConstructor; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -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; @@ -45,6 +46,7 @@ import java.util.function.Predicate; */ @Configuration @EnableAutoConfiguration +@RequiredArgsConstructor @ConditionalOnProperty(name = "swagger.enabled", matchIfMissing = true) public class SwaggerAutoConfiguration { @@ -55,14 +57,10 @@ public class SwaggerAutoConfiguration { private static final String BASE_PATH = "/**"; - @Bean - @ConditionalOnMissingBean - public SwaggerProperties swaggerProperties() { - return new SwaggerProperties(); - } + private final SwaggerProperties swaggerProperties; @Bean - public Docket api(SwaggerProperties swaggerProperties) { + public Docket api() { // base-path处理 if (swaggerProperties.getBasePath().isEmpty()) { swaggerProperties.getBasePath().add(BASE_PATH); @@ -109,24 +107,24 @@ public class SwaggerAutoConfiguration { */ private List defaultAuth() { ArrayList authorizationScopeList = new ArrayList<>(); - swaggerProperties().getAuthorization().getAuthorizationScopeList() + swaggerProperties.getAuthorization().getAuthorizationScopeList() .forEach(authorizationScope -> authorizationScopeList.add( new AuthorizationScope(authorizationScope.getScope(), authorizationScope.getDescription()))); AuthorizationScope[] authorizationScopes = new AuthorizationScope[authorizationScopeList.size()]; return Collections - .singletonList(SecurityReference.builder().reference(swaggerProperties().getAuthorization().getName()) + .singletonList(SecurityReference.builder().reference(swaggerProperties.getAuthorization().getName()) .scopes(authorizationScopeList.toArray(authorizationScopes)).build()); } private OAuth securitySchema() { ArrayList authorizationScopeList = new ArrayList<>(); - swaggerProperties().getAuthorization().getAuthorizationScopeList() + swaggerProperties.getAuthorization().getAuthorizationScopeList() .forEach(authorizationScope -> authorizationScopeList.add( new AuthorizationScope(authorizationScope.getScope(), authorizationScope.getDescription()))); ArrayList grantTypes = new ArrayList<>(); - swaggerProperties().getAuthorization().getTokenUrlList() + swaggerProperties.getAuthorization().getTokenUrlList() .forEach(tokenUrl -> grantTypes.add(new ResourceOwnerPasswordCredentialsGrant(tokenUrl))); - return new OAuth(swaggerProperties().getAuthorization().getName(), authorizationScopeList, grantTypes); + return new OAuth(swaggerProperties.getAuthorization().getName(), authorizationScopeList, grantTypes); } private ApiInfo apiInfo(SwaggerProperties swaggerProperties) { diff --git a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/SwaggerProperties.java b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerProperties.java similarity index 95% rename from pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/SwaggerProperties.java rename to pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerProperties.java index 8e871f47c..f462a735b 100644 --- a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/SwaggerProperties.java +++ b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerProperties.java @@ -14,11 +14,12 @@ * this software without specific prior written permission. * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.swagger.config; +package com.pig4cloud.pigx.common.swagger.support; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; @@ -30,13 +31,14 @@ import java.util.List; * @date: 2018/7/25 14:00 */ @Data +@Component @ConfigurationProperties("swagger") public class SwaggerProperties { /** * 是否开启swagger */ - private Boolean enabled; + private Boolean enabled = true; /** * swagger会解析的包路径 diff --git a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerProvider.java b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerProvider.java index 82844c406..485ba1b6b 100644 --- a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerProvider.java +++ b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerProvider.java @@ -17,8 +17,8 @@ package com.pig4cloud.pigx.common.swagger.support; -import com.pig4cloud.pigx.common.swagger.config.SwaggerProperties; import lombok.RequiredArgsConstructor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.gateway.route.RouteDefinition; import org.springframework.cloud.gateway.route.RouteDefinitionRepository; @@ -39,6 +39,7 @@ import java.util.stream.Collectors; @Primary @Component @RequiredArgsConstructor +@ConditionalOnProperty(name = "swagger.enabled", matchIfMissing = true) public class SwaggerProvider implements SwaggerResourcesProvider { private static final String API_URI = "/v2/api-docs";