refactor: centralize TSF header compatible check in TsfContextUtils

Co-authored-by: Cursor <cursoragent@cursor.com>
pull/1816/head
evelynwei 1 week ago
parent 89ade319fb
commit 53699b35cb

@ -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();
}
}

@ -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();
}
}

@ -92,7 +92,7 @@ public class EncodeTransferMedataFeignEnhancedPlugin implements EnhancedPlugin {
MessageMetadataContainer calleeMessageMetadataContainer = metadataContext.getMetadataContainer(MetadataType.MESSAGE, false);
Map<String, String> calleeTransitiveHeaders = calleeMessageMetadataContainer.getTransitiveHeaders();
if (TsfContextUtils.isTsfHeaderCompatible(isTsfHeaderCompatible())) {
if (TsfContextUtils.isTsfHeaderCompatible(metadataLocalProperties)) {
Map<String, String> 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();
}
}

@ -90,7 +90,7 @@ public class EncodeTransferMedataRestTemplateEnhancedPlugin implements EnhancedP
MessageMetadataContainer calleeMessageMetadataContainer = metadataContext.getMetadataContainer(MetadataType.MESSAGE, false);
Map<String, String> calleeTransitiveHeaders = calleeMessageMetadataContainer.getTransitiveHeaders();
if (TsfContextUtils.isTsfHeaderCompatible(isTsfHeaderCompatible())) {
if (TsfContextUtils.isTsfHeaderCompatible(metadataLocalProperties)) {
Map<String, String> 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();
}
}

@ -97,7 +97,7 @@ public class EncodeTransferMedataScgEnhancedPlugin implements EnhancedPlugin {
MessageMetadataContainer calleeMessageMetadataContainer = metadataContext.getMetadataContainer(MetadataType.MESSAGE, false);
Map<String, String> 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();
}
}

@ -89,7 +89,7 @@ public class EncodeTransferMedataWebClientEnhancedPlugin implements EnhancedPlug
Map<String, String> 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();
}
}

@ -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.
* <p>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);
}
}

@ -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();
}
}

Loading…
Cancel
Save