Class AbstractConsentIndexedStorageAction
java.lang.Object
net.shibboleth.shared.component.AbstractInitializableComponent
org.opensaml.profile.action.AbstractProfileAction
org.opensaml.profile.action.AbstractConditionalProfileAction
net.shibboleth.idp.profile.AbstractProfileAction
net.shibboleth.idp.profile.interceptor.AbstractProfileInterceptorAction
net.shibboleth.idp.consent.flow.impl.AbstractConsentAction
net.shibboleth.idp.consent.flow.storage.impl.AbstractConsentStorageAction
net.shibboleth.idp.consent.flow.storage.impl.AbstractConsentIndexedStorageAction
- All Implemented Interfaces:
Component,DestructableComponent,InitializableComponent,ProfileAction,Aware,MessageSource,MessageSourceAware,Action
- Direct Known Subclasses:
CreateGlobalConsentResult,CreateResult,RevokeConsent
Base class for consent actions which write to a
StorageService.
To facilitate lookup of all storage keys for a storage context, an index record is maintained containing the storage
keys for the context. Because storage records may expire, the index record may contain keys which no longer exist in
the storage service.-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringDefault storage key for the storage index record.private final org.slf4j.LoggerClass logger.private StringStorage key of index record.private Function<ProfileRequestContext,String> Strategy used to determine the storage key of the index record.private StorageSerializer<Collection<String>>Storage keys serializer used to serialize the value of the storage key index record.Strategy used to manipulate the storage keys when pruning storage records. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected booleanaddKeyToStorageIndex(String keyToAdd) Add a storage key to the index storage record.protected voidprotected booleandoPreExecute(ProfileRequestContext profileRequestContext, ProfileInterceptorContext interceptorContext) Performs this profile interceptor action's pre-execute step.protected StringGet the storage key resulting from applying the storage key lookup strategy.Get the storage keys from the storage index record.Get the storage keys serializer used to serialize the value of the storage key index record.protected voidpruneStorageRecords(ProfileRequestContext profileRequestContext) Storage records will be pruned based on the record maximums set on the flow descriptor, and the storage service value size.protected booleanremoveKeyFromStorageIndex(String keyToRemove) Remove a storage key from the index storage record.voidSet the storage index key lookup strategy.voidsetStorageKeysSerializer(StorageSerializer<Collection<String>> serializer) Set the storage keys serializer used to serialize the value of the storage key index record.voidsetStorageKeysStrategy(Function<Pair<ProfileRequestContext, List<String>>, List<String>> strategy) Set the storage keys strategy used to manipulate the storage keys when pruning storage records.protected booleanstoreResult(ProfileInterceptorResult result) Store a profile interceptor result.protected voidstoreResultWithIndex(ProfileRequestContext profileRequestContext, ProfileInterceptorResult result) Store a profile interceptor result and maintain an index record containing the storage keys for the storage context.Methods inherited from class net.shibboleth.idp.consent.flow.storage.impl.AbstractConsentStorageAction
getStorageContext, getStorageContextLookupStrategy, getStorageKey, getStorageKeyLookupStrategy, getStorageSerializer, getStorageService, setStorageContextLookupStrategy, setStorageKeyLookupStrategy, setStorageSerializerMethods inherited from class net.shibboleth.idp.consent.flow.impl.AbstractConsentAction
getConsentContext, getConsentFlowDescriptor, setConsentContextLookupStrategyMethods inherited from class net.shibboleth.idp.profile.interceptor.AbstractProfileInterceptorAction
doExecute, doExecute, doPreExecute, setLookupStrategyMethods inherited from class net.shibboleth.idp.profile.AbstractProfileAction
doExecute, execute, getBean, getBean, getMessage, getMessage, getMessage, getParameter, getParameter, getProfileContextLookupStrategy, getRequestContext, getResult, setMessageSource, setProfileContextLookupStrategyMethods inherited from class org.opensaml.profile.action.AbstractConditionalProfileAction
getActivationCondition, setActivationConditionMethods inherited from class org.opensaml.profile.action.AbstractProfileAction
doPostExecute, doPostExecute, ensureHttpServletRequest, ensureHttpServletResponse, execute, getHttpServletRequest, getHttpServletRequestSupplier, getHttpServletResponse, getHttpServletResponseSupplier, getLogPrefix, isPreExecuteCalled, setHttpServletRequestSupplier, setHttpServletResponseSupplierMethods inherited from class net.shibboleth.shared.component.AbstractInitializableComponent
checkComponentActive, checkSetterPreconditions, destroy, doDestroy, ifDestroyedThrowDestroyedComponentException, ifInitializedThrowUnmodifiabledComponentException, ifNotInitializedThrowUninitializedComponentException, 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.InitializableComponent
initialize, isInitialized
-
Field Details
-
DEFAULT_STORAGE_INDEX_KEY
Default storage key for the storage index record.- See Also:
-
log
@Nonnull private final org.slf4j.Logger logClass logger. -
storageIndexKey
Storage key of index record. -
storageIndexKeyLookupStrategy
Strategy used to determine the storage key of the index record. -
storageKeysStrategy
@Nullable private Function<Pair<ProfileRequestContext,List<String>>, storageKeysStrategyList<String>> Strategy used to manipulate the storage keys when pruning storage records. -
storageKeysSerializer
Storage keys serializer used to serialize the value of the storage key index record.
-
-
Constructor Details
-
AbstractConsentIndexedStorageAction
public AbstractConsentIndexedStorageAction()Constructor.
-
-
Method Details
-
getStorageKeysSerializer
Get the storage keys serializer used to serialize the value of the storage key index record.- Returns:
- the storage keys serializer
-
setStorageIndexKeyLookupStrategy
public void setStorageIndexKeyLookupStrategy(@Nonnull Function<ProfileRequestContext, String> strategy) Set the storage index key lookup strategy.- Parameters:
strategy- the storage index key lookup strategy
-
setStorageKeysSerializer
Set the storage keys serializer used to serialize the value of the storage key index record.- Parameters:
serializer- the storage keys serializer
-
setStorageKeysStrategy
public void setStorageKeysStrategy(@Nonnull Function<Pair<ProfileRequestContext, List<String>>, List<String>> strategy) Set the storage keys strategy used to manipulate the storage keys when pruning storage records.- Parameters:
strategy- the storage keys strategy
-
doInitialize
- Overrides:
doInitializein classAbstractConsentStorageAction- Throws:
ComponentInitializationException
-
doPreExecute
protected boolean doPreExecute(@Nonnull ProfileRequestContext profileRequestContext, @Nonnull ProfileInterceptorContext interceptorContext) Performs this profile interceptor action's pre-execute step. Default implementation returns true.- Overrides:
doPreExecutein classAbstractConsentStorageAction- Parameters:
profileRequestContext- the current profile request contextinterceptorContext- the current profile interceptor context- Returns:
- true iff execution should continue
-
getStorageIndexKey
Get the storage key resulting from applying the storage key lookup strategy.- Returns:
- the storage key
-
getStorageKeysFromIndex
Get the storage keys from the storage index record.- Returns:
- the storage keys from the storage index record
- Throws:
IOException- if errors occur in the read process
-
addKeyToStorageIndex
Add a storage key to the index storage record.- Parameters:
keyToAdd- storage key to add to the index storage record- Returns:
- true if key addition succeeded, false otherwise
- Throws:
IOException- if an error occurs writing to the storage service
-
removeKeyFromStorageIndex
Remove a storage key from the index storage record.- Parameters:
keyToRemove- storage key to remove from the index storage record- Returns:
- true if key removal succeeded, false otherwise
- Throws:
IOException- if an error occurs writing to the storage service
-
pruneStorageRecords
protected void pruneStorageRecords(@Nonnull ProfileRequestContext profileRequestContext) throws IOException Storage records will be pruned based on the record maximums set on the flow descriptor, and the storage service value size. Below a defined threshold, the basic maximum is applied, while at that storage size, an expanded maximum is applied.The function used to determine the records to be deleted may be set by calling
setStorageKeysStrategy(Function). By default, records are deleted on a first-in-first-out basis, meaning the oldest storage records are deleted first.- Parameters:
profileRequestContext- the profile request context- Throws:
IOException- if an error occurs writing to the storage service
-
storeResult
Store a profile interceptor result.- Parameters:
result- the profile interceptor result to be stored- Returns:
- boolean whether the record was stored successfully
- Throws:
IOException- if an error occurs
-
storeResultWithIndex
protected void storeResultWithIndex(@Nonnull ProfileRequestContext profileRequestContext, @Nonnull ProfileInterceptorResult result) throws IOException Store a profile interceptor result and maintain an index record containing the storage keys for the storage context. Storage records are pruned so that the number of records stored is less than or equal toConsentFlowDescriptor.getMaximumNumberOfStoredRecords().- Parameters:
profileRequestContext- the profile request contextresult- the profile interceptor result to be stored- Throws:
IOException- if an error occurs
-