Class AbstractConsentIndexedStorageAction
java.lang.Object
net.shibboleth.utilities.java.support.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 String
Default storage key for the storage index record.private final org.slf4j.Logger
Class logger.private String
Storage 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 boolean
addKeyToStorageIndex
(String keyToAdd) Add a storage key to the index storage record.protected void
protected boolean
doPreExecute
(ProfileRequestContext profileRequestContext, ProfileInterceptorContext interceptorContext) Performs this profile interceptor action's pre-execute step.protected String
Get 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 void
pruneStorageRecords
(ProfileRequestContext profileRequestContext) Storage records will be pruned based on the record maximums set on the flow descriptor, and the storage service value size.protected boolean
removeKeyFromStorageIndex
(String keyToRemove) Remove a storage key from the index storage record.void
Set the storage index key lookup strategy.void
setStorageKeysSerializer
(StorageSerializer<Collection<String>> serializer) Set the storage keys serializer used to serialize the value of the storage key index record.void
setStorageKeysStrategy
(Function<Pair<ProfileRequestContext, List<String>>, List<String>> strategy) Set the storage keys strategy used to manipulate the storage keys when pruning storage records.protected boolean
storeResult
(ProfileInterceptorResult result) Store a profile interceptor result.protected void
storeResultWithIndex
(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, setStorageSerializer
Methods inherited from class net.shibboleth.idp.consent.flow.impl.AbstractConsentAction
getConsentContext, getConsentFlowDescriptor, setConsentContextLookupStrategy
Methods inherited from class net.shibboleth.idp.profile.interceptor.AbstractProfileInterceptorAction
doExecute, doExecute, doPreExecute, setLookupStrategy
Methods inherited from class net.shibboleth.idp.profile.AbstractProfileAction
doExecute, execute, getBean, getBean, getMessage, getMessage, getMessage, getParameter, getParameter, getProfileContextLookupStrategy, getRequestContext, getResult, setMessageSource, setProfileContextLookupStrategy
Methods inherited from class org.opensaml.profile.action.AbstractConditionalProfileAction
getActivationCondition, setActivationCondition
Methods inherited from class org.opensaml.profile.action.AbstractProfileAction
doPostExecute, doPostExecute, execute, getHttpServletRequest, getHttpServletRequestSupplier, getHttpServletResponse, getHttpServletResponseSupplier, getLogPrefix, setHttpServletRequest, setHttpServletRequestSupplier, setHttpServletResponse, setHttpServletResponseSupplier
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
destroy, doDestroy, initialize, isDestroyed, isInitialized
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface net.shibboleth.utilities.java.support.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:
doInitialize
in 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:
doPreExecute
in 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
-