Class AddNameIDToSubjects
- All Implemented Interfaces:
Component
,DestructableComponent
,InitializableComponent
,ProfileAction
NameID
and adds it to the Subject
of all the assertions
found in a Response
. The message to update is returned by a lookup strategy, by default
the message returned by InOutOperationContext.getOutboundMessageContext()
.
If no Response
exists, then an Assertion
directly in the outbound message context will
be used or created by the default lookup strategy.
If no Subject
exists in the assertions found, it will be cretaed.
The source of the NameID
is one of a set of candidate SAML2NameIDGenerator
plugins 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 ClassesModifier and TypeClassDescriptionprivate class
Default strategy for obtaining assertions to modify.static class
Lookup function that returns theNameIDPolicy
from anAuthnRequest
message returned from a lookup function, by default the inbound message.static class
Lookup function that returnsRequestAbstractType.getIssuer()
from a request message returned from a lookup function, by default the inbound message. -
Field Summary
FieldsModifier and TypeFieldDescriptionResponse to modify.private Function<ProfileRequestContext,
List<Assertion>> Strategy used to locate theResponse
to operate on.private Function<ProfileRequestContext,
List<String>> Strategy used to determine the formats to try.Formats to try.private SAML2NameIDGenerator
Generator to use.private IdentifierGenerationStrategy
The generator to use.Strategy used to locate theIdentifierGenerationStrategy
to use.private String
EntityID to populate into Issuer element.private Function<ProfileRequestContext,
String> Strategy used to obtain the response issuer value.private final org.slf4j.Logger
Class logger.private SAMLObjectBuilder<NameID>
Builder for NameID objects.private Predicate<ProfileRequestContext>
Predicate to validateNameIDPolicy
.private boolean
Flag controlling whether to overwrite an existing NameID.private AuthnRequest
Request to examine.private Function<ProfileRequestContext,
AuthnRequest> Strategy used to locate theAuthnRequest
to operate on, if any.private String
Format required by requestedNameIDPolicy
.private SAMLObjectBuilder<Subject>
Builder for Subject objects. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate NameID
cloneNameID
(NameID nameId) Create an efficient field-wise copy of aNameID
.protected void
doExecute
(ProfileRequestContext profileRequestContext) Performs this action.protected void
protected boolean
doPreExecute
(ProfileRequestContext profileRequestContext) Called prior to execution, actions may override this method to perform pre-processing for a request.private NameID
generateNameID
(ProfileRequestContext profileRequestContext) Attempt to generate aNameID
using each of the candidate Formats and plugins.private Subject
getAssertionSubject
(Assertion assertion) Get the subject to which the name identifier will be added.private String
getRequiredFormat
(ProfileRequestContext profileRequestContext) Extract a format required by the inbound request, if present.void
Set the strategy used to locate theAssertion
s to operate on.void
setFormatLookupStrategy
(Function<ProfileRequestContext, List<String>> strategy) Set the strategy function to use to obtain the formats to try.void
setIdentifierGeneratorLookupStrategy
(Function<ProfileRequestContext, IdentifierGenerationStrategy> strategy) Set the strategy used to locate theIdentifierGenerationStrategy
to use.void
Set the strategy used to locate the issuer value to use.void
setNameIDGenerator
(SAML2NameIDGenerator theGenerator) Set the generator to use.void
setNameIDPolicyPredicate
(Predicate<ProfileRequestContext> predicate) Set the predicate used to evaluate theNameIDPolicy
.void
setOverwriteExisting
(boolean flag) Set whether to overwrite any existingNameID
objects found.void
Set the strategy used to locate theAuthnRequest
to examine, if any.Methods inherited from class org.opensaml.profile.action.AbstractProfileAction
doPostExecute, doPostExecute, execute, getHttpServletRequest, getHttpServletResponse, getLogPrefix, setHttpServletRequest, setHttpServletResponse
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
-
log
@Nonnull private final org.slf4j.Logger logClass logger. -
subjectBuilder
Builder for Subject objects. -
nameIdBuilder
Builder for NameID objects. -
overwriteExisting
private boolean overwriteExistingFlag controlling whether to overwrite an existing NameID. -
requestLookupStrategy
Strategy used to locate theAuthnRequest
to operate on, if any. -
assertionsLookupStrategy
Strategy used to locate theResponse
to operate on. -
idGeneratorLookupStrategy
@Nonnull private Function<ProfileRequestContext,IdentifierGenerationStrategy> idGeneratorLookupStrategyStrategy used to locate theIdentifierGenerationStrategy
to use. -
issuerLookupStrategy
Strategy used to obtain the response issuer value. -
nameIDPolicyPredicate
Predicate to validateNameIDPolicy
. -
formatLookupStrategy
Strategy used to determine the formats to try. -
generator
Generator to use. -
formats
Formats to try. -
requiredFormat
Format required by requestedNameIDPolicy
. -
request
Request to examine. -
assertions
Response to modify. -
idGenerator
The generator to use. -
issuerId
EntityID to populate into Issuer element.
-
-
Constructor Details
-
AddNameIDToSubjects
Constructor.- Throws:
ComponentInitializationException
- if an error occurs initializing default predicate.
-
-
Method Details
-
setOverwriteExisting
public void setOverwriteExisting(boolean flag) Set whether to overwrite any existingNameID
objects 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 theAuthnRequest
to 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 theAssertion
s to operate on.- Parameters:
strategy
- lookup strategy
-
setIdentifierGeneratorLookupStrategy
public void setIdentifierGeneratorLookupStrategy(@Nonnull Function<ProfileRequestContext, IdentifierGenerationStrategy> strategy) Set the strategy used to locate theIdentifierGenerationStrategy
to use.- Parameters:
strategy
- lookup strategy
-
setIssuerLookupStrategy
Set the strategy used to locate the issuer value to use.- Parameters:
strategy
- lookup strategy
-
setNameIDPolicyPredicate
Set the predicate used to evaluate theNameIDPolicy
.- Parameters:
predicate
- predicate used to evaluate theNameIDPolicy
-
setFormatLookupStrategy
Set the strategy function to use to obtain the formats to try.- Parameters:
strategy
- format lookup strategy
-
setNameIDGenerator
Set the generator to use.- Parameters:
theGenerator
- the generator to use
-
doInitialize
- Overrides:
doInitialize
in classAbstractInitializableComponent
- Throws:
ComponentInitializationException
-
doPreExecute
Called prior to execution, actions may override this method to perform pre-processing for a request.If false is returned, execution will not proceed, and the action should attach an
EventContext
to the context tree to signal how to continue with overall workflow processing.If returning successfully, the last step should be to return the result of the superclass version of this method.
- Overrides:
doPreExecute
in classAbstractProfileAction
- Parameters:
profileRequestContext
- the current IdP profile request context- Returns:
- true iff execution should proceed
-
doExecute
Performs this action. Actions must override this method to perform their work.- Overrides:
doExecute
in classAbstractProfileAction
- Parameters:
profileRequestContext
- the current IdP profile request context
-
getRequiredFormat
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
Attempt to generate aNameID
using each of the candidate Formats and plugins.- Parameters:
profileRequestContext
- current profile request context- Returns:
- a generated
NameID
or null
-
getAssertionSubject
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
-
cloneNameID
Create an efficient field-wise copy of aNameID
.- Parameters:
nameId
- the object to clone- Returns:
- the copy
-