Search code examples
spring-bootoauth-2.0resttemplatespring-micrometeroauth2resttemplate

Spring Boot OAuth2RestTemplate and HTTP Client Metrics


Actuator manages the instrumentation of RestTemplate, we only have to inject RestTemplateBuilder to create RestTemplate bean:

@Configuration
public class HttpClientConfiguration {
    private final RestTemplateBuilder restTemplateBuilder;

    // let Actuator manages the instrumentation
    public HttpClientConfiguration(RestTemplateBuilder restTemplateBuilder) {
        this.restTemplateBuilder = restTemplateBuilder;
    }

    @Bean // let Sleuth intercept requests
    public RestTemplate createRestTemplate() {
        return restTemplateBuilder.build();
    }
}

How to create an OAuth2RestTemplate bean (built-in OAuth2) with the HTTP Client Mertics support?


Solution

  • I just found a solution:

    @Configuration
    @EnableOAuth2Client
    public class OAuthClientConfig {
        private final MetricsRestTemplateCustomizer metricsRestTemplateCustomizer;
    
        public OAuthConfig(MetricsRestTemplateCustomizer metricsRestTemplateCustomizer) {
            this.metricsRestTemplateCustomizer=metricsRestTemplateCustomizer;
        }
    
        @Bean
        public OAuth2RestTemplate createOAuth2RestTemplate() {
            OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(
                    getClientCredentialsResourceDetails(), 
                    new DefaultOAuth2ClientContext());
            metricsRestTemplateCustomizer.customize(restTemplate);
            return restTemplate;
        }
    
        private ClientCredentialsResourceDetails getClientCredentialsResourceDetails() {
            ClientCredentialsResourceDetails rd = new ClientCredentialsResourceDetails();
            rd.setClientId("my-client-id");
            rd.setClientSecret("my-client-secret");
            rd.setAccessTokenUri("https://my-idp.server/oauth2/token");
            return rd;
        }
    }