From 5548f11100f775e624486146a5fdcf4d27880f8f Mon Sep 17 00:00:00 2001 From: lbw Date: Thu, 20 May 2021 15:05:40 +0800 Subject: [PATCH] :sparkles: pig-common-swagger Code optimization, support servlet, webflux, gateway at the same time --- .../GatewaySwaggerAutoConfiguration.java | 54 ++++++++++++++----- .../swagger/support/SwaggerProvider.java | 5 -- .../support/SwaggerSecurityHandler.java | 10 ++-- .../swagger/support/SwaggerUiHandler.java | 8 ++- pom.xml | 2 +- 5 files changed, 47 insertions(+), 32 deletions(-) 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 dd755fe4b..0ce865cd7 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,15 +1,22 @@ 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; +import com.pig4cloud.pigx.common.swagger.support.*; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.cloud.gateway.route.RouteDefinitionRepository; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Primary; import org.springframework.http.MediaType; -import org.springframework.web.reactive.function.server.*; +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.ServerResponse; +import springfox.documentation.swagger.web.SecurityConfiguration; +import springfox.documentation.swagger.web.SecurityConfigurationBuilder; +import springfox.documentation.swagger.web.UiConfiguration; +import springfox.documentation.swagger.web.UiConfigurationBuilder; /** * @author lengleng @@ -19,16 +26,19 @@ import org.springframework.web.reactive.function.server.*; */ @RequiredArgsConstructor @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE) -@ComponentScan("com.pig4cloud.pigx.common.swagger.support") public class GatewaySwaggerAutoConfiguration { - private final SwaggerResourceHandler swaggerResourceHandler; + @Bean + @Primary + public SwaggerProvider swaggerProvider(RouteDefinitionRepository repository, SwaggerProperties swaggerProperties, + DiscoveryClient discoveryClient) { + return new SwaggerProvider(repository, swaggerProperties, discoveryClient); + } - private final SwaggerSecurityHandler swaggerSecurityHandler; - - private final SwaggerUiHandler swaggerUiHandler; - - private final SwaggerProperties swaggerProperties; + @Bean + public SwaggerResourceHandler swaggerResourceHandler(SwaggerProvider swaggerProvider) { + return new SwaggerResourceHandler(swaggerProvider); + } @Bean public WebFluxSwaggerConfiguration fluxSwaggerConfiguration() { @@ -36,7 +46,23 @@ public class GatewaySwaggerAutoConfiguration { } @Bean - public RouterFunction swaggerRouterFunction() { + public SwaggerSecurityHandler swaggerSecurityHandler( + ObjectProvider securityConfigurationObjectProvider) { + SecurityConfiguration securityConfiguration = securityConfigurationObjectProvider + .getIfAvailable(() -> SecurityConfigurationBuilder.builder().build()); + return new SwaggerSecurityHandler(securityConfiguration); + } + + @Bean + public SwaggerUiHandler swaggerUiHandler(ObjectProvider uiConfigurationObjectProvider) { + UiConfiguration uiConfiguration = uiConfigurationObjectProvider + .getIfAvailable(() -> UiConfigurationBuilder.builder().build()); + return new SwaggerUiHandler(uiConfiguration); + } + + @Bean + public RouterFunction swaggerRouterFunction(SwaggerProperties swaggerProperties, SwaggerUiHandler swaggerUiHandler, + SwaggerSecurityHandler swaggerSecurityHandler, SwaggerResourceHandler swaggerResourceHandler) { // 开启swagger 正常执行路由 if (swaggerProperties.getEnabled()) { return RouterFunctions 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 485ba1b6b..d5b97c6e9 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 @@ -18,13 +18,11 @@ package com.pig4cloud.pigx.common.swagger.support; 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; import org.springframework.cloud.gateway.support.NameUtils; import org.springframework.context.annotation.Primary; -import org.springframework.stereotype.Component; import springfox.documentation.swagger.web.SwaggerResource; import springfox.documentation.swagger.web.SwaggerResourcesProvider; @@ -36,10 +34,7 @@ import java.util.stream.Collectors; /** * @author Sywd 聚合接口文档注册,和zuul实现类似 */ -@Primary -@Component @RequiredArgsConstructor -@ConditionalOnProperty(name = "swagger.enabled", matchIfMissing = true) public class SwaggerProvider implements SwaggerResourcesProvider { private static final String API_URI = "/v2/api-docs"; diff --git a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerSecurityHandler.java b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerSecurityHandler.java index a5d99589c..5fb542e7e 100644 --- a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerSecurityHandler.java +++ b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerSecurityHandler.java @@ -17,11 +17,9 @@ package com.pig4cloud.pigx.common.swagger.support; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; +import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.BodyInserters; import org.springframework.web.reactive.function.server.HandlerFunction; import org.springframework.web.reactive.function.server.ServerRequest; @@ -36,12 +34,10 @@ import java.util.Optional; * @author lengleng * @date 2018-07-19 SwaggerSecurityHandler */ -@Slf4j -@Component +@RequiredArgsConstructor public class SwaggerSecurityHandler implements HandlerFunction { - @Autowired(required = false) - private SecurityConfiguration securityConfiguration; + private final SecurityConfiguration securityConfiguration; /** * Handle the given request. diff --git a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerUiHandler.java b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerUiHandler.java index 86bb435cd..2b5f9dbd4 100644 --- a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerUiHandler.java +++ b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerUiHandler.java @@ -17,11 +17,10 @@ package com.pig4cloud.pigx.common.swagger.support; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.BodyInserters; import org.springframework.web.reactive.function.server.HandlerFunction; import org.springframework.web.reactive.function.server.ServerRequest; @@ -37,11 +36,10 @@ import java.util.Optional; * @date 2018-07-19 SwaggerUiHandler */ @Slf4j -@Component +@RequiredArgsConstructor public class SwaggerUiHandler implements HandlerFunction { - @Autowired(required = false) - private UiConfiguration uiConfiguration; + private final UiConfiguration uiConfiguration; /** * Handle the given request. diff --git a/pom.xml b/pom.xml index 12b58309a..ac5893cfe 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ 1.8 1.8 3.8.1 - 0.0.23 + 0.0.28 2.2.5 2.4.1 5.6.3