You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3中如何跳过含敏感信息的外部GET调用链路追踪?

Spring Boot 3 排除特定外部GET调用的链路追踪方案

你之前用ServerRequestObservationContext找错了方向——这个上下文是处理服务端收到的请求的,而你要排除的是客户端发起的外部GET调用,得针对客户端的观测上下文来配置。

下面分两种常用客户端场景给出具体解决方案:

场景1:使用RestTemplate发起外部调用

需要自定义ObservationPredicate,关联到RestTemplate对应的客户端观测上下文ClientRequestObservationContext:

  1. 编写自定义Predicate:
import io.micrometer.observation.ObservationPredicate;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.web.client.RestTemplate;

public class SensitiveRequestObservationPredicate implements ObservationPredicate {
    @Override
    public boolean test(String name, Context context) {
        // 判断是否为客户端请求上下文,同时匹配GET请求及敏感特征
        if (context instanceof ClientRequestObservationContext clientContext) {
            String method = clientContext.getRequest().getMethod().name();
            String uri = clientContext.getRequest().getURI().toString();
            // 替换为你的敏感请求判断逻辑,比如包含特定路径/参数
            return !("GET".equals(method) && uri.contains("/sensitive-data"));
        }
        // 其他观测场景正常追踪
        return true;
    }
}
  1. 配置RestTemplate时注册该Predicate:
import io.micrometer.observation.ObservationRegistry;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate sensitiveAwareRestTemplate(ObservationRegistry observationRegistry) {
        RestTemplate restTemplate = new RestTemplate();
        // 将自定义Predicate注册到观测注册表
        observationRegistry.observationConfig().observationPredicate(new SensitiveRequestObservationPredicate());
        return restTemplate;
    }
}

场景2:使用WebClient发起外部调用

核心逻辑和RestTemplate一致,同样针对ClientRequestObservationContext做过滤,只需将Predicate注册到ObservationRegistry:

  1. 复用上面的SensitiveRequestObservationPredicate即可。

  2. 配置WebClient:

import io.micrometer.observation.ObservationRegistry;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;

@Configuration
public class WebClientConfig {
    @Bean
    public WebClient sensitiveAwareWebClient(ObservationRegistry observationRegistry) {
        observationRegistry.observationConfig().observationPredicate(new SensitiveRequestObservationPredicate());
        return WebClient.builder().build();
    }
}

关键注意事项

  • 区分服务端上下文与客户端上下文:排除外部请求必须用ClientRequestObservationContext,而非处理入站请求的ServerRequestObservationContext。
  • 敏感请求判断逻辑可灵活调整:比如检查URI中的敏感参数、特定路径,或是请求头标识等。
  • 其他客户端工具(如OpenFeign)适配逻辑一致:找到对应客户端的观测上下文,编写Predicate过滤即可。

内容的提问来源于stack exchange,提问作者SANN3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:02:45