From fdac64c285e35dc35c2d5f075e46f66540b3059c Mon Sep 17 00:00:00 2001 From: Haotian Zhang <928016560@qq.com> Date: Thu, 25 Apr 2024 10:32:56 +0800 Subject: [PATCH] feat:add zero protection. --- .../polaris/config/ConfigurationModifier.java | 4 +- .../PolarisConfigDataLocationResolver.java | 13 ++- .../contract/PolarisContractReporter.java | 6 +- .../PolarisSwaggerAutoConfiguration.java | 4 +- .../main/resources/META-INF/spring.factories | 2 +- ...ot.autoconfigure.AutoConfiguration.imports | 2 +- .../polaris/registry/PolarisRegistration.java | 10 +++ .../registry/PolarisServiceRegistry.java | 1 + .../tencent/cloud/common/util/GzipUtil.java | 84 +++++++++++++++++++ .../config/PolarisContextProperties.java | 2 +- 10 files changed, 120 insertions(+), 8 deletions(-) create mode 100644 spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/util/GzipUtil.java diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/ConfigurationModifier.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/ConfigurationModifier.java index 999bd5168..a6c5f4989 100644 --- a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/ConfigurationModifier.java +++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/ConfigurationModifier.java @@ -63,7 +63,9 @@ public class ConfigurationModifier implements PolarisConfigurationConfigModifier @Override public void modify(ConfigurationImpl configuration) { - if (!polarisConfigProperties.isEnabled()) { + configuration.getGlobal().getAPI().setReportEnable(false); + + if (!polarisContextProperties.getEnabled() || !polarisConfigProperties.isEnabled()) { return; } if (StringUtils.equalsIgnoreCase(polarisConfigProperties.getDataSource(), DATA_SOURCE_POLARIS)) { diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/configdata/PolarisConfigDataLocationResolver.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/configdata/PolarisConfigDataLocationResolver.java index ebe3dcefe..98db039cf 100644 --- a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/configdata/PolarisConfigDataLocationResolver.java +++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/configdata/PolarisConfigDataLocationResolver.java @@ -89,9 +89,16 @@ public class PolarisConfigDataLocationResolver implements if (!location.hasPrefix(PREFIX)) { return false; } - return context.getBinder() + + boolean contextEnabled = context.getBinder() + .bind("spring.cloud.polaris.enabled", Boolean.class) + .orElse(true); + + boolean configEnabled = context.getBinder() .bind("spring.cloud.polaris.config.enabled", Boolean.class) .orElse(true); + + return contextEnabled && configEnabled; } @Override @@ -138,6 +145,10 @@ public class PolarisConfigDataLocationResolver implements polarisContextProperties = new PolarisContextProperties(); } + if (!polarisContextProperties.getEnabled() || !polarisConfigProperties.isEnabled()) { + return Collections.emptyList(); + } + // prepare and init earlier Polaris SDKContext to pull config files from remote. try { prepareAndInitEarlierPolarisSdkContext(resolverContext, polarisConfigProperties, polarisCryptoConfigProperties, polarisContextProperties); diff --git a/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/PolarisContractReporter.java b/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/PolarisContractReporter.java index 1d8305af8..29954cda6 100644 --- a/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/PolarisContractReporter.java +++ b/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/PolarisContractReporter.java @@ -22,6 +22,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import com.tencent.cloud.common.util.GzipUtil; import com.tencent.cloud.common.util.JacksonUtils; import com.tencent.cloud.polaris.PolarisDiscoveryProperties; import com.tencent.cloud.polaris.contract.config.PolarisContractProperties; @@ -97,13 +98,16 @@ public class PolarisContractReporter implements ApplicationListener interfaceDescriptorList = getInterfaceDescriptorFromSwagger(openAPI); request.setInterfaceDescriptors(interfaceDescriptorList); + String jsonValue = JacksonUtils.serialize2Json(openAPI); + String serviceApiMeta = GzipUtil.compressBase64Encode(jsonValue, "utf-8"); + request.setContent(serviceApiMeta); ReportServiceContractResponse response = providerAPI.reportServiceContract(request); LOG.info("Service contract [Namespace: {}. Name: {}. Service: {}. Protocol:{}. Version: {}. API counter: {}] is reported.", request.getNamespace(), request.getName(), request.getService(), request.getProtocol(), request.getVersion(), request.getInterfaceDescriptors().size()); if (LOG.isDebugEnabled()) { - String jsonValue = JacksonUtils.serialize2Json(openAPI); LOG.debug("OpenApi json data: {}", jsonValue); + LOG.debug("OpenApi json base64 data: {}", serviceApiMeta); } } else { diff --git a/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisSwaggerAutoConfiguration.java b/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisSwaggerAutoConfiguration.java index e0af4daf1..0550b95b8 100644 --- a/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisSwaggerAutoConfiguration.java +++ b/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisSwaggerAutoConfiguration.java @@ -85,8 +85,8 @@ public class PolarisSwaggerAutoConfiguration { public OpenAPI polarisOpenAPI() { return new OpenAPI() .info(new Info() - .title("Polaris Swagger API") - .description("This is to show polaris api description.") + .title("Polaris Contract") + .description("This is to show polaris contract description.") .license(new License().name("BSD-3-Clause").url("https://opensource.org/licenses/BSD-3-Clause")) .version("1.0.0")); } diff --git a/spring-cloud-starter-tencent-polaris-contract/src/main/resources/META-INF/spring.factories b/spring-cloud-starter-tencent-polaris-contract/src/main/resources/META-INF/spring.factories index e725a0ce2..bd639443e 100644 --- a/spring-cloud-starter-tencent-polaris-contract/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-starter-tencent-polaris-contract/src/main/resources/META-INF/spring.factories @@ -1,4 +1,4 @@ org.springframework.cloud.bootstrap.BootstrapConfiguration=\ - com.tencent.cloud.polaris.contract.config.PolarisContractPropertiesAutoConfiguration + com.tencent.cloud.polaris.contract.config.PolarisContractPropertiesBootstrapConfiguration org.springframework.context.ApplicationListener=\ com.tencent.cloud.polaris.contract.PolarisSwaggerApplicationListener diff --git a/spring-cloud-starter-tencent-polaris-contract/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-cloud-starter-tencent-polaris-contract/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index c695c214c..78cf3d959 100644 --- a/spring-cloud-starter-tencent-polaris-contract/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/spring-cloud-starter-tencent-polaris-contract/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,2 +1,2 @@ com.tencent.cloud.polaris.contract.config.PolarisSwaggerAutoConfiguration -com.tencent.cloud.polaris.contract.config.PolarisContractProperties +com.tencent.cloud.polaris.contract.config.PolarisContractPropertiesAutoConfiguration diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisRegistration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisRegistration.java index 0a3d09ae8..dd6390403 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisRegistration.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisRegistration.java @@ -67,6 +67,7 @@ public class PolarisRegistration implements Registration { private final List customizers; private boolean registerEnabled = false; private Map metadata; + private Map> extendedMetadata; private int port; private String instanceId; @@ -132,6 +133,8 @@ public class PolarisRegistration implements Registration { this.metadata = instanceMetadata; } + this.extendedMetadata = new HashMap<>(); + // generate registerEnabled if (null != polarisDiscoveryProperties) { registerEnabled = polarisDiscoveryProperties.isRegisterEnabled(); @@ -217,6 +220,13 @@ public class PolarisRegistration implements Registration { return metadata; } + public Map> getExtendedMetadata() { + if (extendedMetadata == null) { + extendedMetadata = new HashMap<>(); + } + return extendedMetadata; + } + @Override public String getInstanceId() { return instanceId; diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java index 43aeaa8c7..80b17a1c2 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java @@ -117,6 +117,7 @@ public class PolarisServiceRegistry implements ServiceRegistry