public static Map<String, String> resolve(ServerWebExchange exchange) {
		Map<String, String> result = new HashMap<>();

		HttpHeaders headers = exchange.getRequest().getHeaders();
		for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
			String key = entry.getKey();
			if (StringUtils.isBlank(key)) {
				continue;
			}
			// resolve sct transitive header
			if (StringUtils.startsWithIgnoreCase(key, MetadataConstant.SCT_TRANSITIVE_HEADER_PREFIX)
					&& !CollectionUtils.isEmpty(entry.getValue())) {
				String sourceKey = StringUtils.substring(key, MetadataConstant.SCT_TRANSITIVE_HEADER_PREFIX_LENGTH);
				result.put(sourceKey, entry.getValue().get(0));
			}

			//resolve polaris transitive header
			if (StringUtils.startsWithIgnoreCase(key, MetadataConstant.POLARIS_TRANSITIVE_HEADER_PREFIX)
					&& !CollectionUtils.isEmpty(entry.getValue())) {
				String sourceKey = StringUtils.substring(key, MetadataConstant.POLARIS_TRANSITIVE_HEADER_PREFIX_LENGTH);
				result.put(sourceKey, entry.getValue().get(0));
			}
		}

		return result;
	}
@Test
	public void testSCTTransitiveMetadata() {
		MockServerHttpRequest.BaseBuilder<?> builder = MockServerHttpRequest.get("");
		builder.header("X-SCT-Metadata-Transitive-a", "test");
		MockServerWebExchange exchange = MockServerWebExchange.from(builder);
		Map<String, String> resolve = CustomTransitiveMetadataResolver.resolve(exchange);
		assertThat(resolve.size()).isEqualTo(1);
		assertThat(resolve.get("a")).isEqualTo("test");
	}