package com.juick.server.configuration; import com.juick.server.ActivityPubManager; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.cache.CacheConfig; import org.apache.http.impl.client.cache.CachingHttpClientBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.BufferingClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; @Configuration public class ActivityPubClientConfig { @Bean public RestTemplate apClient() { SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); RestTemplate restTemplate = new RestTemplate(requestFactory); // BufferingClientHttpRequestFactory allows us to read the response more than once - Necessary for debugging. restTemplate.setRequestFactory(new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient()))); restTemplate.setErrorHandler(new ActivityPubManager.ErrorHandler()); return restTemplate; } @Bean public HttpClient httpClient() { return CachingHttpClientBuilder .create() .setCacheConfig(cacheConfig()) .build(); } @Bean public CacheConfig cacheConfig() { return CacheConfig .custom() .setMaxObjectSize(500000) // 500KB .setMaxCacheEntries(2000) // Set this to false and a response with queryString // will be cached when it is explicitly cacheable .setNeverCacheHTTP10ResponsesWithQueryString(false) .build(); } }