Class AddNameIDToSubjects
- java.lang.Object
-
- net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
-
- org.opensaml.profile.action.AbstractProfileAction
-
- org.opensaml.saml.saml2.profile.impl.AddNameIDToSubjects
-
- All Implemented Interfaces:
Component,DestructableComponent,InitializableComponent,ProfileAction
public class AddNameIDToSubjects extends AbstractProfileAction
Action that builds aNameIDand adds it to theSubjectof all the assertions found in aResponse. The message to update is returned by a lookup strategy, by default the message returned byInOutOperationContext.getOutboundMessageContext().If no
Responseexists, then anAssertiondirectly in the outbound message context will be used or created by the default lookup strategy.If no
Subjectexists in the assertions found, it will be cretaed.The source of the
NameIDis one of a set of candidateSAML2NameIDGeneratorplugins injected into the action. The plugin(s) to attempt to use are derived from the Format value, which is established by a lookup strategy.In addition, the generation process is influenced by the requested
NameIDPolicy, which is evaluated using a pluggable predicate.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classAddNameIDToSubjects.AssertionStrategyDefault strategy for obtaining assertions to modify.static classAddNameIDToSubjects.NameIDPolicyLookupFunctionLookup function that returns theNameIDPolicyfrom anAuthnRequestmessage returned from a lookup function, by default the inbound message.static classAddNameIDToSubjects.RequesterIdFromIssuerFunctionLookup function that returnsRequestAbstractType.getIssuer()from a request message returned from a lookup function, by default the inbound message.
-
Field Summary
Fields Modifier and Type Field Description private List<Assertion>assertionsResponse to modify.private Function<ProfileRequestContext,List<Assertion>>assertionsLookupStrategyStrategy used to locate theResponseto operate on.private Function<ProfileRequestContext,List<String>>formatLookupStrategyStrategy used to determine the formats to try.private List<String>formatsFormats to try.private SAML2NameIDGeneratorgeneratorGenerator to use.private IdentifierGenerationStrategyidGeneratorThe generator to use.private Function<ProfileRequestContext,IdentifierGenerationStrategy>idGeneratorLookupStrategyStrategy used to locate theIdentifierGenerationStrategyto use.private StringissuerIdEntityID to populate into Issuer element.private Function<ProfileRequestContext,String>issuerLookupStrategyStrategy used to obtain the response issuer value.private org.slf4j.LoggerlogClass logger.private SAMLObjectBuilder<NameID>nameIdBuilderBuilder for NameID objects.private Predicate<ProfileRequestContext>nameIDPolicyPredicatePredicate to validateNameIDPolicy.private booleanoverwriteExistingFlag controlling whether to overwrite an existing NameID.private AuthnRequestrequestRequest to examine.private Function<ProfileRequestContext,AuthnRequest>requestLookupStrategyStrategy used to locate theAuthnRequestto operate on, if any.private StringrequiredFormatFormat required by requestedNameIDPolicy.private SAMLObjectBuilder<Subject>subjectBuilderBuilder for Subject objects.
-
Constructor Summary
Constructors Constructor Description AddNameIDToSubjects()Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private NameIDcloneNameID(NameID nameId)Create an efficient field-wise copy of aNameID.protected voiddoExecute(ProfileRequestContext profileRequestContext)protected voiddoInitialize()protected booleandoPreExecute(ProfileRequestContext profileRequestContext)private NameIDgenerateNameID(ProfileRequestContext profileRequestContext)Attempt to generate aNameIDusing each of the candidate Formats and plugins.private SubjectgetAssertionSubject(Assertion assertion)Get the subject to which the name identifier will be added.private StringgetRequiredFormat(ProfileRequestContext profileRequestContext)Extract a format required by the inbound request, if present.voidsetAssertionsLookupStrategy(Function<ProfileRequestContext,List<Assertion>> strategy)Set the strategy used to locate theAssertions to operate on.voidsetFormatLookupStrategy(Function<ProfileRequestContext,List<String>> strategy)Set the strategy function to use to obtain the formats to try.voidsetIdentifierGeneratorLookupStrategy(Function<ProfileRequestContext,IdentifierGenerationStrategy> strategy)Set the strategy used to locate theIdentifierGenerationStrategyto use.voidsetIssuerLookupStrategy(Function<ProfileRequestContext,String> strategy)Set the strategy used to locate the issuer value to use.voidsetNameIDGenerator(SAML2NameIDGenerator theGenerator)Set the generator to use.voidsetNameIDPolicyPredicate(Predicate<ProfileRequestContext> predicate)Set the predicate used to evaluate theNameIDPolicy.voidsetOverwriteExisting(boolean flag)Set whether to overwrite any existingNameIDobjects found.voidsetRequestLookupStrategy(Function<ProfileRequestContext,AuthnRequest> strategy)Set the strategy used to locate theAuthnRequestto examine, if any.-
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 Detail
-
log
@Nonnull private final org.slf4j.Logger log
Class logger.
-
subjectBuilder
@Nonnull private SAMLObjectBuilder<Subject> subjectBuilder
Builder for Subject objects.
-
nameIdBuilder
@Nonnull private SAMLObjectBuilder<NameID> nameIdBuilder
Builder for NameID objects.
-
overwriteExisting
private boolean overwriteExisting
Flag controlling whether to overwrite an existing NameID.
-
requestLookupStrategy
@Nonnull private Function<ProfileRequestContext,AuthnRequest> requestLookupStrategy
Strategy used to locate theAuthnRequestto operate on, if any.
-
assertionsLookupStrategy
@Nonnull private Function<ProfileRequestContext,List<Assertion>> assertionsLookupStrategy
Strategy used to locate theResponseto operate on.
-
idGeneratorLookupStrategy
@Nonnull private Function<ProfileRequestContext,IdentifierGenerationStrategy> idGeneratorLookupStrategy
Strategy used to locate theIdentifierGenerationStrategyto use.
-
issuerLookupStrategy
@Nullable private Function<ProfileRequestContext,String> issuerLookupStrategy
Strategy used to obtain the response issuer value.
-
nameIDPolicyPredicate
@Nonnull private Predicate<ProfileRequestContext> nameIDPolicyPredicate
Predicate to validateNameIDPolicy.
-
formatLookupStrategy
@Nonnull private Function<ProfileRequestContext,List<String>> formatLookupStrategy
Strategy used to determine the formats to try.
-
generator
@NonnullAfterInit private SAML2NameIDGenerator generator
Generator to use.
-
formats
@Nonnull @NonnullElements private List<String> formats
Formats to try.
-
requiredFormat
@Nullable private String requiredFormat
Format required by requestedNameIDPolicy.
-
request
@Nullable private AuthnRequest request
Request to examine.
-
idGenerator
@Nullable private IdentifierGenerationStrategy idGenerator
The generator to use.
-
issuerId
@Nullable private String issuerId
EntityID to populate into Issuer element.
-
-
Constructor Detail
-
AddNameIDToSubjects
public AddNameIDToSubjects() throws ComponentInitializationExceptionConstructor.- Throws:
ComponentInitializationException- if an error occurs initializing default predicate.
-
-
Method Detail
-
setOverwriteExisting
public void setOverwriteExisting(boolean flag)
Set whether to overwrite any existingNameIDobjects found.- Parameters:
flag- true iff the action should overwrite any existing objects
-
setRequestLookupStrategy
public void setRequestLookupStrategy(@Nonnull Function<ProfileRequestContext,AuthnRequest> strategy)Set the strategy used to locate theAuthnRequestto examine, if any.- Parameters:
strategy- strategy used to locate theAuthnRequest
-
setAssertionsLookupStrategy
public void setAssertionsLookupStrategy(@Nonnull Function<ProfileRequestContext,List<Assertion>> strategy)Set the strategy used to locate theAssertions to operate on.- Parameters:
strategy- lookup strategy
-
setIdentifierGeneratorLookupStrategy
public void setIdentifierGeneratorLookupStrategy(@Nonnull Function<ProfileRequestContext,IdentifierGenerationStrategy> strategy)Set the strategy used to locate theIdentifierGenerationStrategyto use.- Parameters:
strategy- lookup strategy
-
setIssuerLookupStrategy
public void setIssuerLookupStrategy(@Nullable Function<ProfileRequestContext,String> strategy)Set the strategy used to locate the issuer value to use.- Parameters:
strategy- lookup strategy
-
setNameIDPolicyPredicate
public void setNameIDPolicyPredicate(@Nonnull Predicate<ProfileRequestContext> predicate)Set the predicate used to evaluate theNameIDPolicy.- Parameters:
predicate- predicate used to evaluate theNameIDPolicy
-
setFormatLookupStrategy
public void setFormatLookupStrategy(@Nonnull Function<ProfileRequestContext,List<String>> strategy)Set the strategy function to use to obtain the formats to try.- Parameters:
strategy- format lookup strategy
-
setNameIDGenerator
public void setNameIDGenerator(@Nullable SAML2NameIDGenerator theGenerator)Set the generator to use.- Parameters:
theGenerator- the generator to use
-
doInitialize
protected void doInitialize() throws ComponentInitializationException- Overrides:
doInitializein classAbstractInitializableComponent- Throws:
ComponentInitializationException
-
doPreExecute
protected boolean doPreExecute(@Nonnull ProfileRequestContext profileRequestContext)- Overrides:
doPreExecutein classAbstractProfileAction
-
doExecute
protected void doExecute(@Nonnull ProfileRequestContext profileRequestContext)- Overrides:
doExecutein classAbstractProfileAction
-
getRequiredFormat
@Nullable private String getRequiredFormat(@Nonnull ProfileRequestContext profileRequestContext)
Extract a format required by the inbound request, if present.- Parameters:
profileRequestContext- current profile request context- Returns:
- a format dictated by the request, or null
-
generateNameID
@Nullable private NameID generateNameID(@Nonnull ProfileRequestContext profileRequestContext)
Attempt to generate aNameIDusing each of the candidate Formats and plugins.- Parameters:
profileRequestContext- current profile request context- Returns:
- a generated
NameIDor null
-
getAssertionSubject
@Nonnull private Subject getAssertionSubject(@Nonnull Assertion assertion)
Get the subject to which the name identifier will be added.- Parameters:
assertion- the assertion being modified- Returns:
- the assertion to which the name identifier will be added
-
-