From 53699b35cb58683965899f7a521db383ffdbb6b6 Mon Sep 17 00:00:00 2001 From: evelynwei Date: Wed, 2 Sep 2026 11:06:43 +0800 Subject: [PATCH] refactor: centralize TSF header compatible check in TsfContextUtils Co-authored-by: Cursor --- .../core/DecodeTransferMetadataReactiveFilter.java | 6 +----- .../core/DecodeTransferMetadataServletFilter.java | 6 +----- .../EncodeTransferMedataFeignEnhancedPlugin.java | 6 +----- ...deTransferMedataRestTemplateEnhancedPlugin.java | 6 +----- .../EncodeTransferMedataScgEnhancedPlugin.java | 6 +----- ...ncodeTransferMedataWebClientEnhancedPlugin.java | 6 +----- .../tencent/cloud/common/tsf/TsfContextUtils.java | 14 ++++++++++++++ .../cloud/common/tsf/TsfContextUtilsTest.java | 13 +++++++++++++ 8 files changed, 33 insertions(+), 30 deletions(-) diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataReactiveFilter.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataReactiveFilter.java index 399b962d2..a22bd0043 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataReactiveFilter.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataReactiveFilter.java @@ -91,7 +91,7 @@ public class DecodeTransferMetadataReactiveFilter implements WebFilter, Ordered serverHttpRequest.getHeaders().getFirst(MetadataConstant.HeaderName.TSF_TAGS), serverHttpRequest.getHeaders().getFirst(MetadataConstant.HeaderName.TSF_SYSTEM_TAG), serverHttpRequest.getHeaders().getFirst(MetadataConstant.HeaderName.TSF_METADATA), - TsfContextUtils.isTsfHeaderCompatible(isTsfHeaderCompatible())); + TsfContextUtils.isTsfHeaderCompatible(metadataLocalProperties)); // transitive metadata // from specific header @@ -154,8 +154,4 @@ public class DecodeTransferMetadataReactiveFilter implements WebFilter, Ordered return JacksonUtils.deserialize2Map(customMetadataStr); } - - private boolean isTsfHeaderCompatible() { - return metadataLocalProperties != null && metadataLocalProperties.isTsfHeaderCompatible(); - } } diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataServletFilter.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataServletFilter.java index 89dbacc70..6c381abf8 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataServletFilter.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataServletFilter.java @@ -86,7 +86,7 @@ public class DecodeTransferMetadataServletFilter extends OncePerRequestFilter { httpServletRequest.getHeader(MetadataConstant.HeaderName.TSF_TAGS), httpServletRequest.getHeader(MetadataConstant.HeaderName.TSF_SYSTEM_TAG), httpServletRequest.getHeader(MetadataConstant.HeaderName.TSF_METADATA), - TsfContextUtils.isTsfHeaderCompatible(isTsfHeaderCompatible())); + TsfContextUtils.isTsfHeaderCompatible(metadataLocalProperties)); // transitive metadata // from specific header @@ -136,8 +136,4 @@ public class DecodeTransferMetadataServletFilter extends OncePerRequestFilter { // create custom metadata. return JacksonUtils.deserialize2Map(customMetadataStr); } - - private boolean isTsfHeaderCompatible() { - return metadataLocalProperties != null && metadataLocalProperties.isTsfHeaderCompatible(); - } } diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataFeignEnhancedPlugin.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataFeignEnhancedPlugin.java index bb2787e22..958658587 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataFeignEnhancedPlugin.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataFeignEnhancedPlugin.java @@ -92,7 +92,7 @@ public class EncodeTransferMedataFeignEnhancedPlugin implements EnhancedPlugin { MessageMetadataContainer calleeMessageMetadataContainer = metadataContext.getMetadataContainer(MetadataType.MESSAGE, false); Map calleeTransitiveHeaders = calleeMessageMetadataContainer.getTransitiveHeaders(); - if (TsfContextUtils.isTsfHeaderCompatible(isTsfHeaderCompatible())) { + if (TsfContextUtils.isTsfHeaderCompatible(metadataLocalProperties)) { Map tsfMetadataMap = TsfTagUtils.getTsfMetadataMap(calleeTransitiveHeaders, disposableMetadata, customMetadata, applicationMetadata); this.buildHeaderMap(request, tsfMetadataMap); } @@ -167,8 +167,4 @@ public class EncodeTransferMedataFeignEnhancedPlugin implements EnhancedPlugin { public int getOrder() { return PluginOrderConstant.ClientPluginOrder.CONSUMER_TRANSFER_METADATA_PLUGIN_ORDER; } - - private boolean isTsfHeaderCompatible() { - return metadataLocalProperties != null && metadataLocalProperties.isTsfHeaderCompatible(); - } } diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataRestTemplateEnhancedPlugin.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataRestTemplateEnhancedPlugin.java index 3aeadcc6a..60f23a9d8 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataRestTemplateEnhancedPlugin.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataRestTemplateEnhancedPlugin.java @@ -90,7 +90,7 @@ public class EncodeTransferMedataRestTemplateEnhancedPlugin implements EnhancedP MessageMetadataContainer calleeMessageMetadataContainer = metadataContext.getMetadataContainer(MetadataType.MESSAGE, false); Map calleeTransitiveHeaders = calleeMessageMetadataContainer.getTransitiveHeaders(); - if (TsfContextUtils.isTsfHeaderCompatible(isTsfHeaderCompatible())) { + if (TsfContextUtils.isTsfHeaderCompatible(metadataLocalProperties)) { Map tsfMetadataMap = TsfTagUtils.getTsfMetadataMap(calleeTransitiveHeaders, disposableMetadata, customMetadata, applicationMetadata); this.buildHeaderMap(httpRequest, tsfMetadataMap); } @@ -141,8 +141,4 @@ public class EncodeTransferMedataRestTemplateEnhancedPlugin implements EnhancedP public int getOrder() { return PluginOrderConstant.ClientPluginOrder.CONSUMER_TRANSFER_METADATA_PLUGIN_ORDER; } - - private boolean isTsfHeaderCompatible() { - return metadataLocalProperties != null && metadataLocalProperties.isTsfHeaderCompatible(); - } } diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataScgEnhancedPlugin.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataScgEnhancedPlugin.java index 33539218d..43eadc9e9 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataScgEnhancedPlugin.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataScgEnhancedPlugin.java @@ -97,7 +97,7 @@ public class EncodeTransferMedataScgEnhancedPlugin implements EnhancedPlugin { MessageMetadataContainer calleeMessageMetadataContainer = metadataContext.getMetadataContainer(MetadataType.MESSAGE, false); Map calleeTransitiveHeaders = calleeMessageMetadataContainer.getTransitiveHeaders(); - if (TsfContextUtils.isTsfHeaderCompatible(isTsfHeaderCompatible())) { + if (TsfContextUtils.isTsfHeaderCompatible(metadataLocalProperties)) { this.buildHeaderMap(builder, TsfTagUtils.getTsfMetadataMap(calleeTransitiveHeaders, disposableMetadata, customMetadata, applicationMetadata)); } // currently only support transitive header from calleeMessageMetadataContainer @@ -135,8 +135,4 @@ public class EncodeTransferMedataScgEnhancedPlugin implements EnhancedPlugin { public int getOrder() { return PluginOrderConstant.ClientPluginOrder.CONSUMER_TRANSFER_METADATA_PLUGIN_ORDER; } - - private boolean isTsfHeaderCompatible() { - return metadataLocalProperties != null && metadataLocalProperties.isTsfHeaderCompatible(); - } } diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataWebClientEnhancedPlugin.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataWebClientEnhancedPlugin.java index 85c0c34c0..dca061bb6 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataWebClientEnhancedPlugin.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataWebClientEnhancedPlugin.java @@ -89,7 +89,7 @@ public class EncodeTransferMedataWebClientEnhancedPlugin implements EnhancedPlug Map calleeTransitiveHeaders = calleeMessageMetadataContainer.getTransitiveHeaders(); ClientRequest.Builder requestBuilder = ClientRequest.from(clientRequest); - if (TsfContextUtils.isTsfHeaderCompatible(isTsfHeaderCompatible())) { + if (TsfContextUtils.isTsfHeaderCompatible(metadataLocalProperties)) { this.buildHeaderMap(requestBuilder, TsfTagUtils.getTsfMetadataMap(calleeTransitiveHeaders, disposableMetadata, customMetadata, applicationMetadata)); } // currently only support transitive header from calleeMessageMetadataContainer @@ -133,8 +133,4 @@ public class EncodeTransferMedataWebClientEnhancedPlugin implements EnhancedPlug public int getOrder() { return PluginOrderConstant.ClientPluginOrder.CONSUMER_TRANSFER_METADATA_PLUGIN_ORDER; } - - private boolean isTsfHeaderCompatible() { - return metadataLocalProperties != null && metadataLocalProperties.isTsfHeaderCompatible(); - } } diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/tsf/TsfContextUtils.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/tsf/TsfContextUtils.java index e3066d804..ba12b0578 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/tsf/TsfContextUtils.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/tsf/TsfContextUtils.java @@ -19,6 +19,7 @@ package com.tencent.cloud.common.tsf; import java.util.concurrent.atomic.AtomicBoolean; +import com.tencent.cloud.common.metadata.config.MetadataLocalProperties; import com.tencent.polaris.api.utils.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -104,4 +105,17 @@ public final class TsfContextUtils { public static boolean isTsfHeaderCompatible(boolean configuredTsfHeaderCompatible) { return configuredTsfHeaderCompatible || isTsfConsulEnabled(); } + + /** + * Whether TSF HTTP headers should be encoded or decoded. + *

True when TSF Consul is enabled, or when + * {@code spring.cloud.tencent.metadata.tsf-header-compatible} is true. + * @param metadataLocalProperties local metadata properties, may be {@code null} + * @return whether TSF headers should be processed + */ + public static boolean isTsfHeaderCompatible(MetadataLocalProperties metadataLocalProperties) { + boolean configured = metadataLocalProperties != null + && metadataLocalProperties.isTsfHeaderCompatible(); + return isTsfHeaderCompatible(configured); + } } diff --git a/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/tsf/TsfContextUtilsTest.java b/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/tsf/TsfContextUtilsTest.java index 13fdbcf90..3efb05ca8 100644 --- a/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/tsf/TsfContextUtilsTest.java +++ b/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/tsf/TsfContextUtilsTest.java @@ -20,6 +20,7 @@ package com.tencent.cloud.common.tsf; import java.lang.reflect.Field; import java.util.concurrent.atomic.AtomicBoolean; +import com.tencent.cloud.common.metadata.config.MetadataLocalProperties; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -62,4 +63,16 @@ public class TsfContextUtilsTest { public void testIsTsfHeaderCompatibleWhenDisabled() { assertThat(TsfContextUtils.isTsfHeaderCompatible(false)).isFalse(); } + + @Test + public void testIsTsfHeaderCompatibleFromProperties() { + assertThat(TsfContextUtils.isTsfHeaderCompatible((MetadataLocalProperties) null)) + .isFalse(); + + MetadataLocalProperties properties = new MetadataLocalProperties(); + assertThat(TsfContextUtils.isTsfHeaderCompatible(properties)).isFalse(); + + properties.setTsfHeaderCompatible(true); + assertThat(TsfContextUtils.isTsfHeaderCompatible(properties)).isTrue(); + } }