Class FileCachingHttpClientBuilder
- java.lang.Object
-
- net.shibboleth.utilities.java.support.httpclient.HttpClientBuilder
-
- net.shibboleth.utilities.java.support.httpclient.FileCachingHttpClientBuilder
-
public class FileCachingHttpClientBuilder extends HttpClientBuilder
AnHttpClientbuilder that supports RFC 2616 caching.Cached content is written to disk. Special care should be taken so that multiple clients do not share a single cache directory unintentionally. This could result in sensitive data being available in ways it should not be.
When using the single-arg constructor variant to wrap an existing instance of
CachingHttpClientBuilder, there are several caveats of which to be aware:-
Several important non-caching-specific caveats are enumerated in this class's superclass
HttpClientBuilder. -
Instances of the following which are set as the default instance on the Apache builder will be
unconditionally overwritten by this builder when
buildClient()is called:CacheConfig
This is due to the unfortunate fact that the Apache builder does not currently provide accessor methods to obtain the default instances currently set on the builder. Therefore, if you need to set any default cache config parameters which are not exposed by this builder, then you must use the Apache builder directly and may not use this builder.
-
Several important non-caching-specific caveats are enumerated in this class's superclass
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classFileCachingHttpClientBuilder.StorageMaintenanceTaskScheduled task to manage an instance ofManagedHttpCacheStorage.private static classFileCachingHttpClientBuilder.StorageManagingHttpClientClass which wraps a caching instance ofCloseableHttpClientand its associatedManagedHttpCacheStorage, and manages the scheduled maintenance and lifecycle of the latter.
-
Field Summary
Fields Modifier and Type Field Description private FilecacheDirDirectory in which cached content will be stored.private DurationmaintentanceTaskIntervalInterval at which the storage maintenance task should run.private org.apache.http.impl.client.cache.ManagedHttpCacheStoragemanagedStorageThe current managed storage instance.private intmaxCacheEntriesThe maximum number of cached responses.private longmaxCacheEntrySizeThe maximum response body size, in bytes, that will be eligible for caching.
-
Constructor Summary
Constructors Constructor Description FileCachingHttpClientBuilder()Constructor.FileCachingHttpClientBuilder(org.apache.http.impl.client.cache.CachingHttpClientBuilder builder)Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description org.apache.http.client.HttpClientbuildClient()Constructs anHttpClientusing the settings of this builder.protected voiddecorateApacheBuilder()Decorate the Apache builder as determined by this builder's parameters.FilegetCacheDirectory()Gets the directory in which cached content will be stored.DurationgetMaintentanceTaskInterval()Get the interval at which the storage maintenance task should run.intgetMaxCacheEntries()Gets the maximum number of cached responses.longgetMaxCacheEntrySize()Gets the maximum response body size, in bytes, that will be eligible for caching.voidsetCacheDirectory(File directory)Sets the directory in which cached content will be stored.voidsetCacheDirectory(String directoryPath)Sets the directory in which cached content will be stored.voidsetMaintentanceTaskInterval(Duration value)Set the interval at which the storage maintenance task should run.voidsetMaxCacheEntries(int maxEntries)Sets the maximum number of cached responses.voidsetMaxCacheEntrySize(long size)Sets the maximum response body size, in bytes, that will be eligible for caching.-
Methods inherited from class net.shibboleth.utilities.java.support.httpclient.HttpClientBuilder
getApacheBuilder, getConnectionProxyHost, getConnectionProxyPassword, getConnectionProxyPort, getConnectionProxyUsername, getConnectionRequestTimeout, getConnectionTimeout, getFirstRequestInterceptors, getFirstResponseInterceptors, getHttpContentCharSet, getHttpRequestRetryHandler, getLastRequestInterceptors, getLastResponseInterceptors, getMaxConnectionsPerRoute, getMaxConnectionsTotal, getServiceUnavailableRetryHandler, getSocketBufferSize, getSocketLocalAddress, getSocketTimeout, getStaticContextHandlers, getTLSSocketFactory, getUserAgent, isConnectionCloseAfterResponse, isConnectionDisregardTLSCertificate, isConnectionStalecheck, isConnectionStaleCheck, isDisableAuthCaching, isDisableAutomaticRetries, isDisableConnectionState, isDisableContentCompression, isDisableCookieManagement, isDisableRedirectHandling, isHttpFollowRedirects, isUseSystemProperties, resetDefaults, setConnectionCloseAfterResponse, setConnectionDisregardTLSCertificate, setConnectionProxyHost, setConnectionProxyPassword, setConnectionProxyPort, setConnectionProxyUsername, setConnectionRequestTimeout, setConnectionStalecheck, setConnectionStaleCheck, setConnectionTimeout, setDisableAuthCaching, setDisableAutomaticRetries, setDisableConnectionState, setDisableContentCompression, setDisableCookieManagement, setDisableRedirectHandling, setFirstRequestInterceptors, setFirstResponseInterceptors, setHttpContentCharSet, setHttpFollowRedirects, setHttpRequestRetryHandler, setLastRequestInterceptors, setLastResponseInterceptors, setMaxConnectionsPerRoute, setMaxConnectionsTotal, setServiceUnavailableRetryHandler, setSocketBufferSize, setSocketLocalAddress, setSocketLocalAddress, setSocketTimeout, setStaticContextHandlers, setTLSSocketFactory, setUserAgent, setUseSystemProperties
-
-
-
-
Field Detail
-
cacheDir
private File cacheDir
Directory in which cached content will be stored. Default:System.getProperty("java.io.tmpdir") + File.separator + "wwwcache"
-
maxCacheEntries
private int maxCacheEntries
The maximum number of cached responses. Default: 100
-
maxCacheEntrySize
private long maxCacheEntrySize
The maximum response body size, in bytes, that will be eligible for caching. Default: 10485760 (10 megabytes)
-
maintentanceTaskInterval
@Nonnull private Duration maintentanceTaskInterval
Interval at which the storage maintenance task should run.
-
managedStorage
private org.apache.http.impl.client.cache.ManagedHttpCacheStorage managedStorage
The current managed storage instance.
-
-
Constructor Detail
-
FileCachingHttpClientBuilder
public FileCachingHttpClientBuilder()
Constructor.
-
FileCachingHttpClientBuilder
public FileCachingHttpClientBuilder(@Nonnull org.apache.http.impl.client.cache.CachingHttpClientBuilder builder)Constructor.- Parameters:
builder- builder of clients used to fetch data from remote servers
-
-
Method Detail
-
getCacheDirectory
public File getCacheDirectory()
Gets the directory in which cached content will be stored.- Returns:
- directory in which cached content will be stored
-
setCacheDirectory
public void setCacheDirectory(@Nonnull @NotEmpty String directoryPath)
Sets the directory in which cached content will be stored.- Parameters:
directoryPath- filesystem path to the directory
-
setCacheDirectory
public void setCacheDirectory(@Nonnull File directory)Sets the directory in which cached content will be stored.- Parameters:
directory- the directory
-
getMaxCacheEntries
public int getMaxCacheEntries()
Gets the maximum number of cached responses.- Returns:
- maximum number of cached responses
-
setMaxCacheEntries
public void setMaxCacheEntries(int maxEntries)
Sets the maximum number of cached responses.- Parameters:
maxEntries- maximum number of cached responses, must be greater than zero
-
getMaxCacheEntrySize
public long getMaxCacheEntrySize()
Gets the maximum response body size, in bytes, that will be eligible for caching.- Returns:
- maximum response body size that will be eligible for caching
-
setMaxCacheEntrySize
public void setMaxCacheEntrySize(long size)
Sets the maximum response body size, in bytes, that will be eligible for caching.- Parameters:
size- maximum response body size that will be eligible for caching, must be greater than zero
-
getMaintentanceTaskInterval
@Nonnull public Duration getMaintentanceTaskInterval()
Get the interval at which the storage maintenance task should run.- Returns:
- the maintenance task interval
-
setMaintentanceTaskInterval
public void setMaintentanceTaskInterval(@Nonnull Duration value)Set the interval at which the storage maintenance task should run.- Parameters:
value- the new maintenance task interval
-
decorateApacheBuilder
protected void decorateApacheBuilder() throws ExceptionDecorate the Apache builder as determined by this builder's parameters. Subclasses will likely add additional decoration.- Overrides:
decorateApacheBuilderin classHttpClientBuilder- Throws:
Exception- if there is a problem decorating the Apache builder
-
buildClient
public org.apache.http.client.HttpClient buildClient() throws ExceptionConstructs anHttpClientusing the settings of this builder.- Overrides:
buildClientin classHttpClientBuilder- Returns:
- the constructed client
- Throws:
Exception- if there is any problem building the new client instance
-
-