Class AttributeResolverImpl
- java.lang.Object
-
- net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
-
- net.shibboleth.utilities.java.support.component.AbstractIdentifiedInitializableComponent
-
- net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent
-
- net.shibboleth.ext.spring.service.AbstractServiceableComponent<AttributeResolver>
-
- net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImpl
-
- All Implemented Interfaces:
AttributeResolver,Component,DestructableComponent,IdentifiableComponent,IdentifiedComponent,InitializableComponent,ServiceableComponent<AttributeResolver>,Aware,ApplicationContextAware
@ThreadSafe public class AttributeResolverImpl extends AbstractServiceableComponent<AttributeResolver> implements AttributeResolver
A component that resolves the attributes for a particular subject. Note WellThis class is about attribute resolution, that is to say the summoning up of attributes in response to the exigies of the provided context. It does not implementResolverwhich in about summoning up bits of generic data from the configuration (usually the metadata) in response to specificCriterions.
-
-
Field Summary
Fields Modifier and Type Field Description private Map<String,AttributeDefinition>attributeDefinitionsAttribute definitions defined for this resolver.private Map<String,DataConnector>dataConnectorsData connectors defined for this resolver.private org.slf4j.LoggerlogClass logger.private StringlogPrefixCache for the log prefix - to save multiple recalculations.private List<String>preRequestedAttributesPreRequestedAttributes, resolved first and made available for late-comers.private Function<AttributeResolutionContext,ProfileRequestContext>profileContextStrategyStrategy to get theProfileRequestContext.private booleanstripNullsWhether to strip null attribute values.private booleansuppressDisplayInformationWhether to attach DisplayInfo to attributes.
-
Constructor Summary
Constructors Constructor Description AttributeResolverImpl()Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected voidcheckPlugInDependencies(String circularCheckPluginId, ResolverPlugin<?> plugin, Set<String> checkedPlugins)Checks to ensure that there are no circular dependencies or dependencies on non-existent plugins.private voidcollectExportingDataConnectors(Map<String,IdPAttribute> resolvedAttributes, AttributeResolutionContext resolutionContext, AttributeResolverWorkContext workContext)Helper function to collect attributes and their data & metadata from suitable data connectors.private voidcollectResolvedAttributes(Map<String,IdPAttribute> resolvedAttributes, AttributeResolverWorkContext workContext, boolean includeDependencyOnly)Helper function to collect suitably resolved attributes.protected voiddoInitialize()private List<IdPAttributeValue>filterAttributeValues(String attributeId, List<IdPAttributeValue> input)Helper method for exporting attributes.protected voidfinalizePreResolvedAttributes(AttributeResolutionContext resolutionContext)Collects the set of pre resolved attributes and places them in anAttributeContextwhich inserted as a child of theAttributeResolutionContextand also returned.protected voidfinalizeResolvedAttributes(AttributeResolutionContext resolutionContext)Finalizes the set of resolved attributes and places them in theAttributeResolutionContext.Map<String,AttributeDefinition>getAttributeDefinitions()Gets the collection of attribute definitions for this resolver.AttributeResolvergetComponent()Map<String,DataConnector>getDataConnectors()Gets the unmodifiable collection of data connectors for this resolver.protected Collection<String>getToBeResolvedAttributeIds(AttributeResolutionContext resolutionContext)Gets the list of attributes, identified by IDs, that should be resolved.booleanisStripNulls()Do we strip nulls from attribute values.booleanisSuppressDisplayInformation()Do we allow addition of Display Information?protected voidresolveAttributeDefinition(String attributeId, AttributeResolutionContext resolutionContext)Resolve theAttributeDefinitionwhich has the specified ID.voidresolveAttributes(AttributeResolutionContext resolutionContext)Resolves the attribute for the given request.protected voidresolveDataConnector(String connectorId, AttributeResolutionContext resolutionContext)Resolve theDataConnectorwhich has the specified ID.protected voidresolveDependencies(ResolverPlugin<?> plugin, AttributeResolutionContext resolutionContext)Resolves all the dependencies for a given plugin.voidsetAttributeDefinitions(Collection<AttributeDefinition> definitions)Sets the attribute definitions for this resolver.voidsetDataConnectors(Collection<DataConnector> connectors)Sets the data connectors for this resolver.voidsetProfileContextLookupStrategy(Function<AttributeResolutionContext,ProfileRequestContext> strategy)Set the mechanism to obtain theProfileRequestContext.voidsetStripNulls(Boolean doStripNulls)Sets whether to strip nulls from attribute values.voidsetSuppressDisplayInformation(boolean what)Deprecated, for removal: This API element is subject to removal in a future version.Display Information should be consulted at point of useprivate booleanstartTimer(AttributeResolutionContext resolutionContext)Conditionally start a timer at the beginning of the resolution process.private voidstopTimer(AttributeResolutionContext resolutionContext)Conditionally stop a timer at the end of the resolution process.-
Methods inherited from class net.shibboleth.ext.spring.service.AbstractServiceableComponent
doDestroy, getApplicationContext, pinComponent, setApplicationContext, unloadComponent, unpinComponent
-
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent
setId
-
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractIdentifiedInitializableComponent
getId
-
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
destroy, 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.IdentifiedComponent
getId
-
-
-
-
Field Detail
-
log
@Nonnull private final org.slf4j.Logger log
Class logger.
-
attributeDefinitions
@NonnullAfterInit private Map<String,AttributeDefinition> attributeDefinitions
Attribute definitions defined for this resolver.
-
dataConnectors
@NonnullAfterInit private Map<String,DataConnector> dataConnectors
Data connectors defined for this resolver.
-
logPrefix
@NonnullAfterInit private String logPrefix
Cache for the log prefix - to save multiple recalculations.
-
preRequestedAttributes
@NonnullAfterInit private List<String> preRequestedAttributes
PreRequestedAttributes, resolved first and made available for late-comers.
-
stripNulls
private boolean stripNulls
Whether to strip null attribute values.
-
suppressDisplayInformation
private boolean suppressDisplayInformation
Whether to attach DisplayInfo to attributes.
-
profileContextStrategy
@Nonnull private Function<AttributeResolutionContext,ProfileRequestContext> profileContextStrategy
Strategy to get theProfileRequestContext.
-
-
Method Detail
-
setAttributeDefinitions
public void setAttributeDefinitions(@Nonnull @NonnullElements Collection<AttributeDefinition> definitions)
Sets the attribute definitions for this resolver.- Parameters:
definitions- attribute definitions loaded in to this resolver
-
getAttributeDefinitions
@Nonnull @NonnullElements @Unmodifiable public Map<String,AttributeDefinition> getAttributeDefinitions()
Gets the collection of attribute definitions for this resolver.- Returns:
- attribute definitions loaded in to this resolver
-
setDataConnectors
public void setDataConnectors(@Nonnull @NonnullElements Collection<DataConnector> connectors)
Sets the data connectors for this resolver.- Parameters:
connectors- data connectors loaded in to this resolver
-
getDataConnectors
@Nonnull @NonnullElements @Unmodifiable public Map<String,DataConnector> getDataConnectors()
Gets the unmodifiable collection of data connectors for this resolver.- Returns:
- data connectors loaded in to this resolver
-
isStripNulls
public boolean isStripNulls()
Do we strip nulls from attribute values.- Returns:
- Returns whether to strip nulls from attribute values
-
setStripNulls
public void setStripNulls(Boolean doStripNulls)
Sets whether to strip nulls from attribute values.- Parameters:
doStripNulls- what to set
-
isSuppressDisplayInformation
public boolean isSuppressDisplayInformation()
Do we allow addition of Display Information?- Returns:
- whether we are suppressing
-
setSuppressDisplayInformation
@Deprecated(forRemoval=true, since="4.2") public void setSuppressDisplayInformation(boolean what)
Deprecated, for removal: This API element is subject to removal in a future version.Display Information should be consulted at point of useSet whether we suppress addition of Display Information.- Parameters:
what- true if we suppress the addition.
-
setProfileContextLookupStrategy
public void setProfileContextLookupStrategy(@Nonnull Function<AttributeResolutionContext,ProfileRequestContext> strategy)Set the mechanism to obtain theProfileRequestContext.- Parameters:
strategy- lookup strategy
-
resolveAttributes
public void resolveAttributes(@Nonnull AttributeResolutionContext resolutionContext) throws ResolutionExceptionResolves the attribute for the given request. Note, if attributes are requested,AttributeResolutionContext.getRequestedIdPAttributeNames(), the resolver will not fail if they can not be resolved. This information serves only as a hint to the resolver to, potentially, optimize the resolution of attributes.- Specified by:
resolveAttributesin interfaceAttributeResolver- Parameters:
resolutionContext- the attribute resolution context that identifies the request subject and accumulates the resolved attributes- Throws:
ResolutionException- thrown if there is a problem resolving the attributes for the subject
-
getToBeResolvedAttributeIds
@Nonnull @NonnullElements protected Collection<String> getToBeResolvedAttributeIds(@Nonnull AttributeResolutionContext resolutionContext)
Gets the list of attributes, identified by IDs, that should be resolved. If theAttributeResolutionContext.getRequestedIdPAttributeNames()is not empty then those attributes are the ones to be resolved, otherwise all registered attribute definitions are to be resolved.- Parameters:
resolutionContext- current resolution context- Returns:
- list of attributes, identified by IDs, that should be resolved
-
resolveAttributeDefinition
protected void resolveAttributeDefinition(@Nonnull String attributeId, @Nonnull AttributeResolutionContext resolutionContext) throws ResolutionExceptionResolve theAttributeDefinitionwhich has the specified ID. The results of the resolution are stored in the givenAttributeResolutionContext.- Parameters:
attributeId- id of the attribute definition to resolveresolutionContext- resolution context that we are working in- Throws:
ResolutionException- if unable to resolve the requested attribute definition
-
resolveDataConnector
protected void resolveDataConnector(@Nonnull String connectorId, @Nonnull AttributeResolutionContext resolutionContext) throws ResolutionExceptionResolve theDataConnectorwhich has the specified ID. The results of the resolution are stored in the givenAttributeResolutionContext.- Parameters:
connectorId- id of the data connector to resolveresolutionContext- resolution context that we are working in- Throws:
ResolutionException- if unable to resolve the requested connector
-
resolveDependencies
protected void resolveDependencies(@Nonnull ResolverPlugin<?> plugin, @Nonnull AttributeResolutionContext resolutionContext) throws ResolutionExceptionResolves all the dependencies for a given plugin.- Parameters:
plugin- plugin whose dependencies should be resolvedresolutionContext- current resolution context- Throws:
ResolutionException- thrown if there is a problem resolving a dependency
-
filterAttributeValues
@Nullable @NonnullElements private List<IdPAttributeValue> filterAttributeValues(String attributeId, List<IdPAttributeValue> input)
Helper method for exporting attributes.- Parameters:
attributeId- the if (for logging)input- the inout list- Returns:
- a null stripped, or null list of values
-
collectResolvedAttributes
private void collectResolvedAttributes(Map<String,IdPAttribute> resolvedAttributes, AttributeResolverWorkContext workContext, boolean includeDependencyOnly)
Helper function to collect suitably resolved attributes.- Parameters:
resolvedAttributes- bucket to collect attributes intoworkContext- context to extract attributes fromincludeDependencyOnly- whether we include dependencyOnly attributes
-
collectExportingDataConnectors
private void collectExportingDataConnectors(Map<String,IdPAttribute> resolvedAttributes, AttributeResolutionContext resolutionContext, AttributeResolverWorkContext workContext)
Helper function to collect attributes and their data & metadata from suitable data connectors.- Parameters:
resolvedAttributes- bucket to collect attributes intoresolutionContext- the context we are working inworkContext- context to extract attributes from
-
finalizeResolvedAttributes
protected void finalizeResolvedAttributes(@Nonnull AttributeResolutionContext resolutionContext)Finalizes the set of resolved attributes and places them in theAttributeResolutionContext. The result of eachAttributeDefinitionresolution is inspected. If the result is not null, a dependency-only attribute, or an attribute that contains no values then it becomes part of the final set of resolved attributes.Then we handle attribute exports from DataConnectors.
Values are also de-duplicated here, so that all the intermediate operations maintain the coherency of multi-valued result sets produced by data connectors.
- Parameters:
resolutionContext- current resolution context
-
finalizePreResolvedAttributes
protected void finalizePreResolvedAttributes(@Nonnull AttributeResolutionContext resolutionContext)Collects the set of pre resolved attributes and places them in anAttributeContextwhich inserted as a child of theAttributeResolutionContextand also returned.Values are also de-duplicated here.
- Parameters:
resolutionContext- current resolution context
-
doInitialize
protected void doInitialize() throws ComponentInitializationException- Overrides:
doInitializein classAbstractServiceableComponent<AttributeResolver>- Throws:
ComponentInitializationException
-
checkPlugInDependencies
protected void checkPlugInDependencies(String circularCheckPluginId, ResolverPlugin<?> plugin, Set<String> checkedPlugins) throws ComponentInitializationException
Checks to ensure that there are no circular dependencies or dependencies on non-existent plugins.- Parameters:
circularCheckPluginId- the ID of the plugin currently being checked for circular dependenciesplugin- current plugin, in the dependency tree of the plugin being checked, that we're currently looking atcheckedPlugins- IDs of plugins that have already been checked and known to be good- Throws:
ComponentInitializationException- thrown if there is a dependency loop
-
getComponent
@Nonnull public AttributeResolver getComponent()
- Specified by:
getComponentin interfaceServiceableComponent<AttributeResolver>- Specified by:
getComponentin classAbstractServiceableComponent<AttributeResolver>
-
startTimer
private boolean startTimer(@Nonnull AttributeResolutionContext resolutionContext)Conditionally start a timer at the beginning of the resolution process.- Parameters:
resolutionContext- attribute resolution context- Returns:
- true iff the
stopTimer(AttributeResolutionContext)method needs to be called
-
stopTimer
private void stopTimer(@Nonnull AttributeResolutionContext resolutionContext)Conditionally stop a timer at the end of the resolution process.- Parameters:
resolutionContext- attribute resolution context
-
-