Class FileBackedHTTPMetadataResolver
- All Implemented Interfaces:
Iterable<EntityDescriptor>,Component,DestructableComponent,IdentifiableComponent,IdentifiedComponent,InitializableComponent,Resolver<EntityDescriptor,,CriteriaSet> IterableMetadataSource,BatchMetadataResolver,MetadataResolver,RefreshableMetadataResolver,RemoteMetadataResolver
If the backup file does not already exist, it will be created by saving the byte[] retrieved in the HTTP fetch.
If isInitializeFromBackupFile() is true, then initialization will attempt to load metadata first
from the backup file on disk, if it exists. If successful then the next refresh after initialization, which
will attempt the full HTTP fetch, will be scheduled for the interval indicated by
getBackupFileInitNextRefreshDelay(). This can help prevent large metadata batches from slowing down
the synchronous resolver start up process, deferring the more expensive HTTP fetch operation to the asynchronous
background refresh thread.
-
Nested Class Summary
Nested classes/interfaces inherited from class org.opensaml.saml.metadata.resolver.impl.AbstractBatchMetadataResolver
AbstractBatchMetadataResolver.BatchEntityBackingStoreNested classes/interfaces inherited from class org.opensaml.saml.metadata.resolver.impl.AbstractMetadataResolver
AbstractMetadataResolver.EntityBackingStore -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate DurationDuration after which to schedule next refresh, when initialized from backup file.private booleanFlag indicating whether metadata load during init was from backup file.private booleanFlag indicating whether initialization should first attempt to load metadata from backup file.private booleanFlag used to track state of whether currently initializing or not.private final org.slf4j.LoggerClass logger.private FileFile containing the backup of the metadata.Fields inherited from class org.opensaml.saml.metadata.resolver.impl.AbstractReloadingMetadataResolver
METRIC_TIMER_REFRESH -
Constructor Summary
ConstructorsConstructorDescriptionFileBackedHTTPMetadataResolver(Timer backgroundTaskTimer, org.apache.hc.client5.http.classic.HttpClient client, String metadataURL, String backupFilePath) Constructor.FileBackedHTTPMetadataResolver(org.apache.hc.client5.http.classic.HttpClient client, String metadataURL, String backupFilePath) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected DurationcomputeNextRefreshDelay(Instant expectedExpiration) Computes the delay until the next refresh time based on the current metadata's expiration time and the refresh interval floor.protected voidprotected byte[]Gets the metadata document from the remote server.Get the duration after which to schedule next refresh, when initialized from backup file.protected voidSubclasses should override this method to perform any initialization logic necessary.booleanGet the flag indicating whether metadata load during initialization was from backup file.booleanGet the flag indicating whether initialization should first attempt to load metadata from backup file, if it exists.protected MetadataFilterContextGet a new instance ofMetadataFilterContextto be used when filtering metadata.protected voidpostProcessMetadata(byte[] metadataBytes, Document metadataDom, XMLObject originalMetadata, XMLObject filteredMetadata) Post-processing hook called after new metadata has been unmarshalled, filtered, and the DOM released (from theXMLObject) but before the metadata is saved off.protected voidsetBackupFile(String backupFilePath) Sets the file used to backup metadata.voidSet the duration after which to schedule next refresh, when initialized from backup file.voidsetInitializeFromBackupFile(boolean flag) Set the flag indicating whether initialization should first attempt to load metadata from backup file, if it exists.protected voidvalidateBackupFile(File backupFile) Validate the basic properties of the specified metadata backup file, for example that it exists and/or can be created; that it is not a directory; and that it is readable and writable.Methods inherited from class org.opensaml.saml.metadata.resolver.impl.HTTPMetadataResolver
buildHttpClientContext, buildHttpGet, getHttpClientSecurityParameters, getMetadataBytesFromResponse, getMetadataIdentifier, getMetadataURI, processConditionalRetrievalHeaders, setHttpClientSecurityParametersMethods inherited from class org.opensaml.saml.metadata.resolver.impl.AbstractReloadingMetadataResolver
getExpirationTime, getExpirationWarningThreshold, getLastFailureCause, getLastRefresh, getLastSuccessfulRefresh, getLastUpdate, getMaxRefreshDelay, getMinRefreshDelay, getNextRefresh, getRefreshDelayFactor, inputstreamToByteArray, processCachedMetadata, processNewMetadata, processNonExpiredMetadata, processPreExpiredMetadata, refresh, setCacheSourceMetadata, setExpirationWarningThreshold, setMaxRefreshDelay, setMinRefreshDelay, setRefreshDelayFactor, unmarshallMetadata, wasLastRefreshSuccessMethods inherited from class org.opensaml.saml.metadata.resolver.impl.AbstractBatchMetadataResolver
createNewBackingStore, doResolve, ensureBackingStore, getCachedFilteredMetadata, getCachedOriginalMetadata, getIndexes, getRootValidUntil, indexEntityDescriptor, isCacheSourceMetadata, isResolveViaPredicatesOnly, isRootValid, iterator, lookupByIndexes, preProcessNewMetadata, setIndexes, setResolveViaPredicatesOnlyMethods inherited from class org.opensaml.saml.metadata.resolver.impl.AbstractMetadataResolver
doInitialize, filterMetadata, getActivationCondition, getBackingStore, getCriterionPredicateRegistry, getLogPrefix, getMetadataFilter, getMetricsBaseName, getParserPool, getType, getUnmarshallerFactory, isFailFastInitialization, isRequireValidMetadata, isSatisfyAnyPredicates, isUseDefaultPredicateRegistry, isValid, lookupEntityID, lookupIndexedEntityID, predicateFilterCandidates, preProcessEntitiesDescriptor, preProcessEntityDescriptor, releaseMetadataDOM, removeByEntityID, resolve, resolveSingle, setActivationCondition, setBackingStore, setCriterionPredicateRegistry, setFailFastInitialization, setMetadataFilter, setMetricsBaseName, setParserPool, setRequireValidMetadata, setSatisfyAnyPredicates, setType, setUseDefaultPredicateRegistry, unmarshallMetadataMethods inherited from class net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent
setIdMethods inherited from class net.shibboleth.shared.component.AbstractIdentifiedInitializableComponent
ensureId, getId, ifDestroyedThrowDestroyedComponentException, ifInitializedThrowUnmodifiabledComponentException, ifNotInitializedThrowUninitializedComponentExceptionMethods inherited from class net.shibboleth.shared.component.AbstractInitializableComponent
checkComponentActive, checkSetterPreconditions, destroy, initialize, isDestroyed, isInitializedMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface net.shibboleth.shared.component.IdentifiedComponent
getIdMethods inherited from interface java.lang.Iterable
forEach, spliteratorMethods inherited from interface org.opensaml.saml.metadata.resolver.MetadataResolver
getMetadataFilter, getType, isRequireValidMetadata, setMetadataFilter, setRequireValidMetadataMethods inherited from interface net.shibboleth.shared.resolver.Resolver
resolve, resolveSingle
-
Field Details
-
log
@Nonnull private final org.slf4j.Logger logClass logger. -
metadataBackupFile
File containing the backup of the metadata. -
initializing
private boolean initializingFlag used to track state of whether currently initializing or not. -
initializeFromBackupFile
private boolean initializeFromBackupFileFlag indicating whether initialization should first attempt to load metadata from backup file. -
initializedFromBackupFile
private boolean initializedFromBackupFileFlag indicating whether metadata load during init was from backup file. -
backupFileInitNextRefreshDelay
Duration after which to schedule next refresh, when initialized from backup file.
-
-
Constructor Details
-
FileBackedHTTPMetadataResolver
public FileBackedHTTPMetadataResolver(@Nonnull org.apache.hc.client5.http.classic.HttpClient client, @Nonnull String metadataURL, @Nonnull String backupFilePath) throws ResolverException Constructor.- Parameters:
client- HTTP client used to fetch remote metadatametadataURL- the URL to fetch the metadatabackupFilePath- the file that will keep a backup copy of the metadata,- Throws:
ResolverException- thrown if the URL is not a valid URL, the metadata can not be retrieved from the URL
-
FileBackedHTTPMetadataResolver
public FileBackedHTTPMetadataResolver(@Nullable Timer backgroundTaskTimer, @Nonnull org.apache.hc.client5.http.classic.HttpClient client, @Nonnull String metadataURL, @Nonnull String backupFilePath) throws ResolverException Constructor.- Parameters:
client- HTTP client used to fetch remote metadatabackgroundTaskTimer- timer used to schedule background metadata refresh tasksmetadataURL- the URL to fetch the metadatabackupFilePath- the file that will keep a backup copy of the metadata,- Throws:
ResolverException- thrown if the URL is not a valid URL, the metadata can not be retrieved from the URL
-
-
Method Details
-
isInitializedFromBackupFile
public boolean isInitializedFromBackupFile()Get the flag indicating whether metadata load during initialization was from backup file.- Returns:
- true if initial load was from backup file, false otherwise
-
isInitializeFromBackupFile
public boolean isInitializeFromBackupFile()Get the flag indicating whether initialization should first attempt to load metadata from backup file, if it exists.Defaults to: true.
- Returns:
- true if should initialize from backup file, false otherwise
-
setInitializeFromBackupFile
public void setInitializeFromBackupFile(boolean flag) Set the flag indicating whether initialization should first attempt to load metadata from backup file, if it exists.Defaults to: true.
- Parameters:
flag- true if should initialize from backup file, false otherwise
-
getBackupFileInitNextRefreshDelay
Get the duration after which to schedule next refresh, when initialized from backup file.Defaults to 5s.
- Returns:
- the duration
-
setBackupFileInitNextRefreshDelay
Set the duration after which to schedule next refresh, when initialized from backup file.Defaults to 5s.
- Parameters:
delay- the next refresh delay
-
doDestroy
protected void doDestroy()- Overrides:
doDestroyin classHTTPMetadataResolver
-
initMetadataResolver
Subclasses should override this method to perform any initialization logic necessary. Default implementation is a no-op.- Overrides:
initMetadataResolverin classAbstractReloadingMetadataResolver- Throws:
ComponentInitializationException- thrown if there is a problem initializing the provider
-
setBackupFile
Sets the file used to backup metadata. The given file path is checked to see if it is a read/writable file if it exists or if can be created if it does not exist.- Parameters:
backupFilePath- path to the backup file- Throws:
ResolverException- thrown if the backup file is not read/writable or creatable
-
validateBackupFile
Validate the basic properties of the specified metadata backup file, for example that it exists and/or can be created; that it is not a directory; and that it is readable and writable.- Parameters:
backupFile- the file to evaluate- Throws:
ResolverException- if file does not pass basic properties required of a metadata backup file
-
fetchMetadata
Gets the metadata document from the remote server.- Overrides:
fetchMetadatain classHTTPMetadataResolver- Returns:
- the metadata from remote server, or null if the metadata document has not changed since the last retrieval
- Throws:
ResolverException- thrown if there is a problem retrieving the metadata from the remote server
-
newFilterContext
Get a new instance ofMetadataFilterContextto be used when filtering metadata.This default implementation will just return an empty context. Subclasses would override to add contextual info specific to the implementation.
- Overrides:
newFilterContextin classAbstractMetadataResolver- Returns:
- the new filter context instance
-
computeNextRefreshDelay
Computes the delay until the next refresh time based on the current metadata's expiration time and the refresh interval floor.- Overrides:
computeNextRefreshDelayin classAbstractReloadingMetadataResolver- Parameters:
expectedExpiration- the time when the metadata is expected to expire and need refreshing- Returns:
- delay until the next refresh time
-
postProcessMetadata
protected void postProcessMetadata(@Nonnull byte[] metadataBytes, @Nonnull Document metadataDom, @Nonnull XMLObject originalMetadata, @Nullable XMLObject filteredMetadata) throws ResolverException Post-processing hook called after new metadata has been unmarshalled, filtered, and the DOM released (from theXMLObject) but before the metadata is saved off. Any exception thrown by this hook will cause the retrieved metadata to be discarded. The default implementation of this method is a no-op- Overrides:
postProcessMetadatain classAbstractReloadingMetadataResolver- Parameters:
metadataBytes- original raw metadata bytes retrieved viaAbstractReloadingMetadataResolver.fetchMetadata()metadataDom- original metadata after it has been parsed in to a DOM documentoriginalMetadata- original metadata prior to being filtered, with its DOM releasedfilteredMetadata- metadata after it has been run through all registered filters and its DOM released- Throws:
ResolverException- thrown if there is a problem with the provided data
-