✨ pig-common-swagger Code optimization, support servlet, webflux, gateway at the same time

This commit is contained in:
lbw committed 2021-05-20 15:05:40 +08:00
1 parent 22cb241520
commit 5548f11100
5 files changed
+47 -32

No files matched your search

@@ -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<SecurityConfiguration> securityConfigurationObjectProvider) {
SecurityConfiguration securityConfiguration = securityConfigurationObjectProvider
.getIfAvailable(() -> SecurityConfigurationBuilder.builder().build());
return new SwaggerSecurityHandler(securityConfiguration);
}
@Bean
public SwaggerUiHandler swaggerUiHandler(ObjectProvider<UiConfiguration> 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
@@ -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";
@@ -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<ServerResponse> {
@Autowired(required = false)
private SecurityConfiguration securityConfiguration;
private final SecurityConfiguration securityConfiguration;
/**
* Handle the given request.
@@ -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<ServerResponse> {
@Autowired(required = false)
private UiConfiguration uiConfiguration;
private final UiConfiguration uiConfiguration;
/**
* Handle the given request.
+1 -1
View File
@@ -40,7 +40,7 @@
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.version>3.8.1</maven.compiler.version>
<spring.checkstyle.version>0.0.23</spring.checkstyle.version>
<spring.checkstyle.version>0.0.28</spring.checkstyle.version>
<git.commit.version>2.2.5</git.commit.version>
<spring-boot-admin.version>2.4.1</spring-boot-admin.version>
<hutool.version>5.6.3</hutool.version>