Class AbstractWsSecurityInterceptor
- All Implemented Interfaces:
org.springframework.core.Ordered, ClientInterceptor, EndpointInterceptor, SoapEndpointInterceptor
- Direct Known Subclasses:
Wss4jSecurityInterceptor
endpoint mapping; or on the client side, on the
web service template.
Subclasses of this base class can be configured to secure incoming and secure outgoing messages. By default, both are on.
Fault responses are treated separately from regular responses: they are not secured or
validated unless secureFault or
validateFault is explicitly enabled, since existing
WS-Security configurations may not expect to secure or validate the fault path.
- Since:
- 1.0.0
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intDefault order for WS-Security interceptors, ensuring they run early.protected final org.apache.commons.logging.LogLogger available to subclasses.protected static final QNameFields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidafterCompletion(MessageContext messageContext, @Nullable Exception ex) Callback after completion of request and response (fault) processing.voidafterCompletion(MessageContext messageContext, Object endpoint, @Nullable Exception ex) Callback after completion of request and response (fault) processing.protected abstract voidcleanUp()intgetOrder()booleanhandleFault(MessageContext messageContext) Validates a client-side incoming fault response.booleanhandleFault(MessageContext messageContext, Object endpoint) Secure a server-side outgoing fault response.protected booleanhandleFaultException(WsSecurityFaultException ex, MessageContext messageContext) Handles a fault exception.Default implementation logs the given exception, and creates a SOAP Fault with the properties of the given exception, and returnsfalse.final booleanhandleRequest(MessageContext messageContext) Secures a client-side outgoing request.final booleanhandleRequest(MessageContext messageContext, Object endpoint) Validates a server-side incoming request.final booleanhandleResponse(MessageContext messageContext) Validates a client-side incoming response.final booleanhandleResponse(MessageContext messageContext, Object endpoint) Secures a server-side outgoing response.protected booleanhandleSecurementException(WsSecuritySecurementException ex, MessageContext messageContext) Handles an securement exception.protected booleanhandleValidationException(WsSecurityValidationException ex, MessageContext messageContext) Handles an invalid SOAP message.protected abstract voidsecureMessage(SoapMessage soapMessage, MessageContext messageContext) Abstract template method.voidsetExceptionResolver(EndpointExceptionResolver exceptionResolver) Provide anEndpointExceptionResolverfor resolving validation exceptions.voidsetSecureFault(boolean secureFault) Indicate whether server-side outgoing fault responses are to be secured.voidsetSecureRequest(boolean secureRequest) Indicates whether client-side outgoing requests are to be secured.voidsetSecureResponse(boolean secureResponse) Indicates whether server-side outgoing responses are to be secured.voidsetSkipValidationIfNoHeaderPresent(boolean skipValidationIfNoHeaderPresent) Indicates whether validation is skipped for messages that carry nowsse:Securityheader.voidsetValidateFault(boolean validateFault) Indicate whether client-side incoming fault responses are to be validated.voidsetValidateRequest(boolean validateRequest) Indicates whether server-side incoming request are to be validated.voidsetValidateResponse(boolean validateResponse) Indicates whether client-side incoming responses are to be validated.booleanunderstands(SoapHeaderElement headerElement) Given aSoapHeaderElement, return whether or not thisSoapEndpointInterceptorunderstands it.protected abstract voidvalidateMessage(SoapMessage soapMessage, MessageContext messageContext) Abstract template method.
-
Field Details
-
DEFAULT_ORDER
public static final int DEFAULT_ORDERDefault order for WS-Security interceptors, ensuring they run early. Any interceptor with a higher precedence than -200 will therefore run before security is applied.- Since:
- 3.1.9
- See Also:
-
logger
protected final org.apache.commons.logging.Log loggerLogger available to subclasses. -
WS_SECURITY_NAME
-
-
Constructor Details
-
AbstractWsSecurityInterceptor
public AbstractWsSecurityInterceptor()
-
-
Method Details
-
setValidateRequest
public void setValidateRequest(boolean validateRequest) Indicates whether server-side incoming request are to be validated. Defaults totrue. -
setSecureResponse
public void setSecureResponse(boolean secureResponse) Indicates whether server-side outgoing responses are to be secured. Defaults totrue. -
setSecureRequest
public void setSecureRequest(boolean secureRequest) Indicates whether client-side outgoing requests are to be secured. Defaults totrue. -
setValidateResponse
public void setValidateResponse(boolean validateResponse) Indicates whether client-side incoming responses are to be validated. Defaults totrue. -
setExceptionResolver
Provide anEndpointExceptionResolverfor resolving validation exceptions. -
setSkipValidationIfNoHeaderPresent
public void setSkipValidationIfNoHeaderPresent(boolean skipValidationIfNoHeaderPresent) Indicates whether validation is skipped for messages that carry nowsse:Securityheader. Defaults tofalse.On the server side, this applies to incoming requests, and the sender of a request decides whether to include the header. Enabling this therefore makes every
validation actionconfigured on this interceptor optional from the caller's point of view: a request that simply omits the header reaches the endpoint with no signature, encryption, timestamp or username token check applied. Do not enable this for endpoints that rely on WS-Security to authenticate or authorize their callers.On the client side, this applies to the
validation of responsesreceived from a server that the client chose to call, where accepting an unsecured reply is usually a deliberate interoperability decision rather than a trust boundary. -
setSecureFault
public void setSecureFault(boolean secureFault) Indicate whether server-side outgoing fault responses are to be secured. Defaults tofalse.Some clients, such as those built with WCF, require that fault responses carry the same WS-Security header (for instance a Timestamp) as regular responses.
- Since:
- 5.1.0
-
setValidateFault
public void setValidateFault(boolean validateFault) Indicate whether client-side incoming fault responses are to be validated. Defaults tofalse.- Since:
- 5.1.0
-
getOrder
public int getOrder()- Specified by:
getOrderin interfaceorg.springframework.core.Ordered
-
handleRequest
Validates a server-side incoming request. Delegates tovalidateMessage(SoapMessage,MessageContext)if thevalidateRequestproperty istrue.- Specified by:
handleRequestin interfaceEndpointInterceptor- Parameters:
messageContext- the message context, containing the request to be validatedendpoint- chosen endpoint to invoke- Returns:
trueif the request was valid;falseotherwise.- Throws:
Exception- in case of errors- See Also:
-
handleResponse
public final boolean handleResponse(MessageContext messageContext, Object endpoint) throws Exception Secures a server-side outgoing response. Delegates tosecureMessage(org.springframework.ws.soap.SoapMessage, MessageContext)if thesecureResponseproperty istrue.- Specified by:
handleResponsein interfaceEndpointInterceptor- Parameters:
messageContext- the message context, containing the response to be securedendpoint- chosen endpoint to invoke- Returns:
trueif the response was secured;falseotherwise.- Throws:
Exception- in case of errors- See Also:
-
handleFault
Secure a server-side outgoing fault response. Delegates tosecureMessage(SoapMessage, MessageContext)if thesecureFaultproperty istrue. Fault responses are not secured by default.- Specified by:
handleFaultin interfaceEndpointInterceptor- Parameters:
messageContext- the message context, containing the fault response to be securedendpoint- chosen endpoint to invoke- Returns:
trueif the fault response was secured, or securing it was not requested;falseotherwise.- Throws:
Exception- in case of errors- See Also:
-
afterCompletion
Description copied from interface:EndpointInterceptorCallback after completion of request and response (fault) processing. Will be called on any outcome of endpoint invocation, thus allows for proper resource cleanup.Note: Will be called if this interceptor's
EndpointInterceptor.handleRequest(MessageContext, Object)method was invoked, whatever its outcome. In particular, it is called whenhandleRequestreturnedfalseor threw an exception, so that an interceptor can release whatever it had set up by then. This differs fromEndpointInterceptor.handleResponse(MessageContext, Object)andEndpointInterceptor.handleFault(MessageContext, Object), which are only called whenhandleRequestreturned.As with the
EndpointInterceptor.handleResponse(MessageContext, Object)method, the method will be invoked on each interceptor in the chain in reverse order, so the first interceptor will be the last to be invoked.- Specified by:
afterCompletionin interfaceEndpointInterceptor- Parameters:
messageContext- contains both request and response messages, the response should contains a Faultendpoint- chosen endpoint to invokeex- exception thrown on handler execution, if any
-
understands
Description copied from interface:SoapEndpointInterceptorGiven aSoapHeaderElement, return whether or not thisSoapEndpointInterceptorunderstands it.- Specified by:
understandsin interfaceSoapEndpointInterceptor- Parameters:
headerElement- the header- Returns:
trueif understood,falseotherwise
-
handleRequest
Secures a client-side outgoing request. Delegates tosecureMessage(SoapMessage, MessageContext)if thesecureRequestproperty istrue.- Specified by:
handleRequestin interfaceClientInterceptor- Parameters:
messageContext- the message context, containing the request to be secured- Returns:
trueif the response was secured;falseotherwise.- Throws:
WebServiceClientException- in case of errors- See Also:
-
handleResponse
Validates a client-side incoming response. Delegates tovalidateMessage(SoapMessage, MessageContext)if thevalidateResponseproperty istrue.- Specified by:
handleResponsein interfaceClientInterceptor- Parameters:
messageContext- the message context, containing the response to be validated- Returns:
trueif the request was valid;falseotherwise.- Throws:
WebServiceClientException- in case of errors- See Also:
-
handleFault
Validates a client-side incoming fault response. Delegates tovalidateMessage(SoapMessage, MessageContext)if thevalidateFaultproperty istrue. Fault responses are not validated by default.- Specified by:
handleFaultin interfaceClientInterceptor- Parameters:
messageContext- the message context, containing the fault response to be validated- Returns:
trueif the fault response was valid, or validating it was not requested;falseotherwise.- Throws:
WebServiceClientException- in case of errors- See Also:
-
afterCompletion
public void afterCompletion(MessageContext messageContext, @Nullable Exception ex) throws WebServiceClientException Description copied from interface:ClientInterceptorCallback after completion of request and response (fault) processing. Will be called on any outcome, thus allows for proper resource cleanup.Note: Will only be called if this interceptor's
ClientInterceptor.handleRequest(MessageContext)method has successfully completed.- Specified by:
afterCompletionin interfaceClientInterceptor- Parameters:
messageContext- contains both request and response messages, the response should contains a Faultex- exception thrown on handler execution, if any- Throws:
WebServiceClientException- in case of errors
-
handleSecurementException
protected boolean handleSecurementException(WsSecuritySecurementException ex, MessageContext messageContext) Handles an securement exception. Default implementation logs the given exception, and returnsfalse.- Parameters:
ex- the validation exceptionmessageContext- the message context- Returns:
trueto continue processing the message,false(the default) otherwise
-
handleValidationException
protected boolean handleValidationException(WsSecurityValidationException ex, MessageContext messageContext) Handles an invalid SOAP message. Default implementation logs the given exception, delegates to the setexceptionResolverif any, or creates a SOAP 1.1 Client or SOAP 1.2 Sender Fault with the exception message as fault string, and returnsfalse.- Parameters:
ex- the validation exceptionmessageContext- the message context- Returns:
trueto continue processing the message,false(the default) otherwise
-
handleFaultException
Handles a fault exception.Default implementation logs the given exception, and creates a SOAP Fault with the properties of the given exception, and returnsfalse.- Parameters:
ex- the validation exceptionmessageContext- the message context- Returns:
trueto continue processing the message,false(the default) otherwise
-
validateMessage
protected abstract void validateMessage(SoapMessage soapMessage, MessageContext messageContext) throws WsSecurityValidationException Abstract template method. Subclasses are required to validate the request contained in the givenSoapMessage, and replace the original request with the validated version.- Parameters:
soapMessage- the soap message to validate- Throws:
WsSecurityValidationException- in case of validation errors
-
secureMessage
protected abstract void secureMessage(SoapMessage soapMessage, MessageContext messageContext) throws WsSecuritySecurementException Abstract template method. Subclasses are required to secure the response contained in the givenSoapMessage, and replace the original response with the secured version.- Parameters:
soapMessage- the soap message to secure- Throws:
WsSecuritySecurementException- in case of securement errors
-
cleanUp
protected abstract void cleanUp()
-