Class AbstractMetadataDrivenConfigurationLookupStrategy<T>

java.lang.Object
net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
net.shibboleth.idp.saml.profile.config.AbstractMetadataDrivenConfigurationLookupStrategy<T>
Type Parameters:
T - type of property being returned
All Implemented Interfaces:
Function<BaseContext,​T>, Component, DestructableComponent, InitializableComponent
Direct Known Subclasses:
AbstractCollectionConfigurationLookupStrategy, BeanConfigurationLookupStrategy, BooleanConfigurationLookupStrategy, DoubleConfigurationLookupStrategy, DurationConfigurationLookupStrategy, IntegerConfigurationLookupStrategy, LongConfigurationLookupStrategy, StringConfigurationLookupStrategy

public abstract class AbstractMetadataDrivenConfigurationLookupStrategy<T>
extends AbstractInitializableComponent
implements Function<BaseContext,​T>
A strategy function that examines SAML metadata associated with a relying party and derives configuration settings based on EntityAttribute extension tags.

The function is tailored with properties that determine what tag it looks for, with subclasses handling the specific type conversion logic.

If a specific property is unavailable, then null is returned.

Since:
3.4.0
  • Field Details

    • DEFAULT_PRC_METADATA_LOOKUP

      @Nonnull private static final Function<ProfileRequestContext,​EntityDescriptor> DEFAULT_PRC_METADATA_LOOKUP
      Default metadata lookup for PRC-based usage.
    • DEFAULT_PRC_PROFILE_ID_LOOKUP

      @Nonnull private static final Function<ProfileRequestContext,​String> DEFAULT_PRC_PROFILE_ID_LOOKUP
      Default profile ID lookup for PRC-based usage.
    • DEFAULT_MC_METADATA_LOOKUP

      @Nonnull private static final Function<MessageContext,​EntityDescriptor> DEFAULT_MC_METADATA_LOOKUP
      Default metadata lookup for MC-based usage.
    • DEFAULT_MC_PROFILE_ID_LOOKUP

      @Nonnull private static final Function<MessageContext,​String> DEFAULT_MC_PROFILE_ID_LOOKUP
      Default profile ID lookup for MC-based usage.
    • log

      @Nonnull private final org.slf4j.Logger log
      Class logger.
    • strictNameFormat

      private boolean strictNameFormat
      Require use of URI attribute name format.
    • enableCaching

      private boolean enableCaching
      Cache the lookup in the context tree.
    • ignoreUnmappedEntityAttributes

      private boolean ignoreUnmappedEntityAttributes
      Examine only decoded/mapped tags in object metadata.
    • propertyName

      @NonnullAfterInit @NotEmpty private String propertyName
      Base name of property to produce.
    • propertyAliases

      Alternative "full" property identifiers to support.
    • defaultValueStrategy

      @Nullable private Function<BaseContext,​T> defaultValueStrategy
      Optional default to return in the absence of a property.
    • metadataLookupStrategy

      @Nullable private Function<BaseContext,​EntityDescriptor> metadataLookupStrategy
      Strategy for obtaining metadata to check.
    • profileIdLookupStrategy

      @Nullable @NotEmpty private Function<BaseContext,​String> profileIdLookupStrategy
      Strategy for obtaining profile ID for property naming.
  • Constructor Details

    • AbstractMetadataDrivenConfigurationLookupStrategy

      public AbstractMetadataDrivenConfigurationLookupStrategy()
      Constructor.
  • Method Details

    • setStrictNameFormat

      public void setStrictNameFormat​(boolean flag)
      Sets whether tag matching should examine and require an Attribute NameFormat of the URI type.

      Default is false.

      Parameters:
      flag - flag to set
    • setEnableCaching

      public void setEnableCaching​(boolean flag)
      Sets whether property lookup should be cached in the profile context tree.

      Default is true.

      Parameters:
      flag - flag to set
    • setIgnoreUnmappedEntityAttributes

      public void setIgnoreUnmappedEntityAttributes​(boolean flag)
      Sets whether property lookup should be based solely on mapped/decoded objects and not on underlying SAML Attributes.

      Default is false.

      Parameters:
      flag - flag to set
    • setPropertyName

      public void setPropertyName​(@Nonnull @NotEmpty String name)
      Sets the "base" name of the property/setting to derive.
      Parameters:
      name - base property name
    • setProfileAliases

      public void setProfileAliases​(@Nonnull @NonnullElements Collection<String> aliases)
      Sets profile ID aliases to include when checking for metadata tags (the property name is suffixed to the aliases).

      This allows alternative tag names to be checked.

      Parameters:
      aliases - alternative profile IDs
    • setDefaultValue

      public void setDefaultValue​(@Nullable T value)
      Sets a default value to return as the function result in the absence of an explicit property.
      Parameters:
      value - default value to return
    • setDefaultValueStrategy

      public void setDefaultValueStrategy​(@Nonnull Function<BaseContext,​T> strategy)
      Sets a default value function to apply in the absence of an explicit property.
      Parameters:
      strategy - default function to apply
      Since:
      4.0.0
    • setMetadataLookupStrategy

      public void setMetadataLookupStrategy​(@Nonnull Function<BaseContext,​EntityDescriptor> strategy)
      Sets lookup strategy for metadata to examine.
      Parameters:
      strategy - lookup strategy
    • setProfileIdLookupStrategy

      public void setProfileIdLookupStrategy​(@Nonnull Function<BaseContext,​String> strategy)
      Sets lookup strategy for profile ID to base property names on.
      Parameters:
      strategy - lookup strategy
    • doInitialize

      protected void doInitialize() throws ComponentInitializationException
      Overrides:
      doInitialize in class AbstractInitializableComponent
      Throws:
      ComponentInitializationException
    • apply

      @Nullable public T apply​(@Nullable BaseContext input)
      Specified by:
      apply in interface Function<BaseContext,​T>
    • translate

      @Nullable private T translate​(@Nonnull Attribute tag)
      Translate the value(s) into a setting of the appropriate type.
      Parameters:
      tag - tag to translate
      Returns:
      the setting derived from the tag's value(s)
    • translate

      @Nullable private T translate​(@Nonnull IdPAttribute tag)
      Translate the value(s) into a setting of the appropriate type.
      Parameters:
      tag - tag to translate
      Returns:
      the setting derived from the tag's value(s)
    • doTranslate

      @Nullable protected abstract T doTranslate​(@Nonnull Attribute tag)
      Translate the value(s) into a setting of the appropriate type.

      Overrides of this function can assume a non-zero collection of values.

      Parameters:
      tag - tag to translate
      Returns:
      the setting derived from the tag's value(s)
    • doTranslate

      @Nullable protected abstract T doTranslate​(@Nonnull IdPAttribute tag)
      Translate the value(s) into a setting of the appropriate type.

      Overrides of this function can assume a non-zero collection of values.

      Parameters:
      tag - tag to translate
      Returns:
      the setting derived from the tag's value(s)
    • findMatchingMappedTag

      @Nullable private IdPAttribute findMatchingMappedTag​(@Nonnull EntityDescriptor entity, @Nonnull @NotEmpty String name)
      Find first matching attribute in the input object's node metadata.
      Parameters:
      entity - the metadata to examine
      name - the tag name to search for
      Returns:
      matching attribute, or null
    • findMatchingTag

      @Nullable private Attribute findMatchingTag​(@Nonnull EntityDescriptor entity, @Nonnull @NotEmpty String name)
      Find a matching entity attribute in the input metadata.
      Parameters:
      entity - the metadata to examine
      name - the tag name to search for
      Returns:
      matching attribute or null
    • findMatchingMappedTag

      @Nullable private IdPAttribute findMatchingMappedTag​(@Nonnull LockableClassToInstanceMultiMap<?> input, @Nonnull @NotEmpty String name)
      Find first matching attribute in the input object's node metadata.
      Parameters:
      input - the metadata to examine
      name - the tag name to search for
      Returns:
      matching attribute, or null
    • findMatchingTag

      @Nullable private Attribute findMatchingTag​(@Nonnull EntityAttributes entityAttributes, @Nonnull @NotEmpty String name)
      Find a matching entity attribute in the input metadata.
      Parameters:
      entityAttributes - the metadata to examine
      name - the tag name to search for
      Returns:
      matching attribute or null