Package org.opensaml.saml.saml2.binding.encoding.impl

# Class HTTPArtifactEncoder

java.lang.Object
net.shibboleth.shared.component.AbstractInitializableComponent
org.opensaml.messaging.encoder.AbstractMessageEncoder
org.opensaml.messaging.encoder.servlet.AbstractHttpServletResponseMessageEncoder
org.opensaml.messaging.encoder.servlet.BaseHttpServletResponseXMLMessageEncoder
org.opensaml.saml.common.binding.impl.BaseSAMLHttpServletResponseEncoder
org.opensaml.saml.saml2.binding.encoding.impl.BaseSAML2MessageEncoder
org.opensaml.saml.saml2.binding.encoding.impl.HTTPArtifactEncoder

All Implemented Interfaces:
  `Component`, `DestructableComponent`, `InitializableComponent`, `UnmodifiableComponent`, `HTMLMessageEncoder`, `MessageEncoder`, `HttpServletResponseMessageEncoder`, `SAMLMessageEncoder`

public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder implements HTMLMessageEncoder
SAML 2 Artifact Binding encoder, support both HTTP GET and POST.

## Field Summary

Fields
Modifier and Type
Field
Description
`private SAMLArtifactMap`
`artifactMap`
SAML artifact map used to store created artifacts for later retrieval.
`private StringDigester`
`cspDigester`
Digester for CSP hashes.
`private IdentifierGenerationStrategy`
`cspNonceGenerator`
Generator for CSP nonces.
`static final String`
`DEFAULT_TEMPLATE_ID`
Default template ID.
`private byte[]`
`defaultArtifactType`
Default artifact type to use when encoding messages.
`private final org.slf4j.Logger`
`log`
Class logger.
`private boolean`
`postEncoding`
Whether the POST encoding should be used, instead of GET.
`private org.apache.velocity.app.VelocityEngine`
`velocityEngine`
Velocity engine used to evaluate the template when performing POST encoding.
`private String`
`velocityTemplateId`
ID of the velocity template used when performing POST encoding.

### Fields inherited from class org.opensaml.messaging.encoder.AbstractMessageEncoder

`BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY`

## Constructor Summary

Constructors
Constructor
Description
`HTTPArtifactEncoder()`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`protected SAML2Artifact`
`buildArtifact(MessageContext messageContext)`
Builds the SAML 2 artifact for the outgoing message.
`protected void`
`doEncode()`
Performs the encoding logic.
`protected void`
`doInitialize()`
`SAMLArtifactMap`
`getArtifactMap()`
Get the SAML artifact map to use.
`String`
`getBindingURI()`
Gets the SAML binding URI supported by this encoder.
`protected void`
`getEncode()`
Performs HTTP GET based encoding.
`private String`
`getInboundMessageIssuer(MessageContext messageContext)`
Get the requester.
`private String`
`getOutboundMessageIssuer(MessageContext messageContext)`
Get the outbound message issuer.
`private byte[]`
`getSAMLArtifactType(MessageContext messageContext)`
Get the SAML artifact type from the message context.
`org.apache.velocity.app.VelocityEngine`
`getVelocityEngine()`
Get the VelocityEngine instance.
`String`
`getVelocityTemplateId()`
Get the Velocity template id.
`boolean`
`isPostEncoding()`
Get whether the encoder will encode the artifact via POST encoding.
`protected void`
`postEncode()`
Performs HTTP POST based encoding.
`void`
`setArtifactMap(SAMLArtifactMap newArtifactMap)`
Set the SAML artifact map to use.
`void`
`setCSPDigester(StringDigester digester)`
Set a `StringDigester` to use to generate CSP hashes.
`void`
`setCSPNonceGenerator(IdentifierGenerationStrategy strategy)`
Set a `IdentifierGenerationStrategy` to use to generate CSP nonces.
`void`
`setPostEncoding(boolean post)`
Set whether the encoder will encode the artifact via POST encoding.
`void`
`setVelocityEngine(org.apache.velocity.app.VelocityEngine newVelocityEngine)`
Set the VelocityEngine instance.
`void`
`setVelocityTemplateId(String newVelocityTemplateId)`
Set the Velocity template id.
`private void`
`storeSAMLArtifactType(MessageContext messageContext, byte[] artifactType)`
Store the SAML artifact type in the message context.

### Methods inherited from class org.opensaml.saml.saml2.binding.encoding.impl.BaseSAML2MessageEncoder

`getEndpointURL`

### Methods inherited from class org.opensaml.messaging.encoder.servlet.BaseHttpServletResponseXMLMessageEncoder

`encode, marshallMessage, serializeMessageForLogging`

### Methods inherited from class org.opensaml.messaging.encoder.servlet.AbstractHttpServletResponseMessageEncoder

`getHttpServletResponse, getHttpServletResponseSupplier, setHttpServletResponseSupplier`

### Methods inherited from class org.opensaml.messaging.encoder.AbstractMessageEncoder

`getMessageContext, getMessageToLog, getProtocolMessageLogger, getProtocolMessageLoggerSubCategory, logEncodedMessage, prepareContext, setMessageContext, setProtocolMessageLoggerSubCategory`

### Methods inherited from class net.shibboleth.shared.component.AbstractInitializableComponent

`checkComponentActive, checkSetterPreconditions, destroy, doDestroy, ifDestroyedThrowDestroyedComponentException, ifInitializedThrowUnmodifiabledComponentException, ifNotInitializedThrowUninitializedComponentException, 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.shared.component.DestructableComponent

`destroy, isDestroyed`

### Methods inherited from interface net.shibboleth.shared.component.InitializableComponent

`initialize, isInitialized`

### Methods inherited from interface org.opensaml.messaging.encoder.MessageEncoder

`encode, prepareContext, setMessageContext`

## Field Details

### DEFAULT_TEMPLATE_ID

@Nonnull @NotEmpty public static final String DEFAULT_TEMPLATE_ID
Default template ID.

See Also:
  - Constant Field Values

### log

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

### postEncoding

private boolean postEncoding
Whether the POST encoding should be used, instead of GET.

### velocityEngine

@Nullable private org.apache.velocity.app.VelocityEngine velocityEngine
Velocity engine used to evaluate the template when performing POST encoding.

### velocityTemplateId

@Nonnull @NotEmpty private String velocityTemplateId
ID of the velocity template used when performing POST encoding.

### cspDigester

@Nullable private StringDigester cspDigester
Digester for CSP hashes.

### cspNonceGenerator

@Nullable private IdentifierGenerationStrategy cspNonceGenerator
Generator for CSP nonces.

### artifactMap

@NonnullAfterInit private SAMLArtifactMap artifactMap
SAML artifact map used to store created artifacts for later retrieval.

### defaultArtifactType

@Nonnull @NotEmpty private byte[] defaultArtifactType
Default artifact type to use when encoding messages.

## Constructor Details

### HTTPArtifactEncoder

public HTTPArtifactEncoder()
Constructor.

## Method Details

### getBindingURI

@Nonnull @NotEmpty public String getBindingURI()
Gets the SAML binding URI supported by this encoder.

Specified by:
  `getBindingURI` in interface `SAMLMessageEncoder`
Returns:
  SAML binding URI supported by this encoder

### isPostEncoding

public boolean isPostEncoding()
Get whether the encoder will encode the artifact via POST encoding.

Returns:
  true if POST encoding will be used, false if GET encoding will be used

### setPostEncoding

public void setPostEncoding(boolean post)
Set whether the encoder will encode the artifact via POST encoding.

Parameters:
  `post` - true if POST encoding will be used, false if GET encoding will be used

### getVelocityEngine

@Nullable public org.apache.velocity.app.VelocityEngine getVelocityEngine()
Get the VelocityEngine instance.

Returns:
  return the VelocityEngine instance

### setVelocityEngine

public void setVelocityEngine(@Nullable org.apache.velocity.app.VelocityEngine newVelocityEngine)
Set the VelocityEngine instance.

Parameters:
  `newVelocityEngine` - the new VelocityEngine instane

### getVelocityTemplateId

@Nonnull @NotEmpty public String getVelocityTemplateId()
Get the Velocity template id.

Defaults to `DEFAULT_TEMPLATE_ID`.

Returns:
  return the Velocity template id

### setVelocityTemplateId

public void setVelocityTemplateId(@Nonnull @NotEmpty String newVelocityTemplateId)
Set the Velocity template id.

Defaults to `DEFAULT_TEMPLATE_ID`.

Parameters:
  `newVelocityTemplateId` - the new Velocity template id

### setCSPDigester

public void setCSPDigester(@Nullable StringDigester digester)
Set a `StringDigester` to use to generate CSP hashes.

Specified by:
  `setCSPDigester` in interface `HTMLMessageEncoder`
Parameters:
  `digester` - string digester

### setCSPNonceGenerator

public void setCSPNonceGenerator(@Nullable IdentifierGenerationStrategy strategy)
Set a `IdentifierGenerationStrategy` to use to generate CSP nonces.

Specified by:
  `setCSPNonceGenerator` in interface `HTMLMessageEncoder`
Parameters:
  `strategy` - nonce strategy

### getArtifactMap

@NonnullAfterInit public SAMLArtifactMap getArtifactMap()
Get the SAML artifact map to use.

Returns:
  the artifactMap.

### setArtifactMap

public void setArtifactMap(@Nonnull SAMLArtifactMap newArtifactMap)
Set the SAML artifact map to use.

Parameters:
  `newArtifactMap` - the new artifactMap

### doInitialize

protected void doInitialize() throws ComponentInitializationException

Overrides:
  `doInitialize` in class `AbstractHttpServletResponseMessageEncoder`
Throws:
  `ComponentInitializationException`

### doEncode

protected void doEncode() throws MessageEncodingException
Performs the encoding logic. By the time this is called, this encoder has already been initialized and checked to ensure that it has not been destroyed.

Specified by:
  `doEncode` in class `AbstractMessageEncoder`
Throws:
  `MessageEncodingException` - thrown if there is a problem encoding the message

### postEncode

protected void postEncode() throws MessageEncodingException
Performs HTTP POST based encoding.

Throws:
  `MessageEncodingException` - thrown if there is a problem POST encoding the artifact

### getEncode

protected void getEncode() throws MessageEncodingException
Performs HTTP GET based encoding.

Throws:
  `MessageEncodingException` - thrown if there is a problem GET encoding the artifact

### buildArtifact

@Nonnull protected SAML2Artifact buildArtifact(@Nonnull MessageContext messageContext) throws MessageEncodingException
Builds the SAML 2 artifact for the outgoing message.

Parameters:
  `messageContext` - current request context
Returns:
  SAML 2 artifact for outgoing message
Throws:
  `MessageEncodingException` - thrown if the artifact can not be created

### getOutboundMessageIssuer

@Nullable private String getOutboundMessageIssuer(@Nonnull MessageContext messageContext)
Get the outbound message issuer.

Parameters:
  `messageContext` - the message context
Returns:
  the outbound message issuer

### getInboundMessageIssuer

@Nullable private String getInboundMessageIssuer(@Nonnull MessageContext messageContext)
Get the requester.

Parameters:
  `messageContext` - the message context
Returns:
  the requester

### storeSAMLArtifactType

private void storeSAMLArtifactType(@Nonnull MessageContext messageContext, @Nonnull @NotEmpty byte[] artifactType)
Store the SAML artifact type in the message context.

Parameters:
  `messageContext` - the message context
  `artifactType` - the artifact type to store

### getSAMLArtifactType

@Nullable private byte[] getSAMLArtifactType(@Nonnull MessageContext messageContext)
Get the SAML artifact type from the message context.

Parameters:
  `messageContext` - the message context
Returns:
  the artifact type