This commit is contained in:
Arjen Poutsma
2008-05-01 23:54:47 +00:00
parent fe45fe131a
commit 43eb72f57c
3 changed files with 62 additions and 3 deletions

View File

@@ -136,6 +136,7 @@
<dependency>
<groupId>org.acegisecurity</groupId>
<artifactId>acegi-security</artifactId>
<optional>true</optional>
</dependency>
<!-- Spring Security dependencies -->
<dependency>

View File

@@ -23,6 +23,7 @@ import java.util.Vector;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.xml.soap.SOAPException;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
@@ -48,6 +49,7 @@ import org.springframework.ws.soap.SoapMessage;
import org.springframework.ws.soap.axiom.AxiomSoapMessage;
import org.springframework.ws.soap.axiom.support.AxiomUtils;
import org.springframework.ws.soap.saaj.SaajSoapMessage;
import org.springframework.ws.soap.saaj.SaajSoapMessageException;
import org.springframework.ws.soap.security.AbstractWsSecurityInterceptor;
import org.springframework.ws.soap.security.WsSecuritySecurementException;
import org.springframework.ws.soap.security.WsSecurityValidationException;
@@ -590,8 +592,14 @@ public class Wss4jSecurityInterceptor extends AbstractWsSecurityInterceptor impl
/** Converts the given {@link SoapMessage} into a {@link Document}. */
private Document toDocument(SoapMessage soapMessage) {
if (soapMessage instanceof SaajSoapMessage) {
SaajSoapMessage saajMessage = (SaajSoapMessage) soapMessage;
return saajMessage.getSaajMessage().getSOAPPart();
javax.xml.soap.SOAPMessage saajMessage = ((SaajSoapMessage) soapMessage).getSaajMessage();
try {
saajMessage.saveChanges();
}
catch (SOAPException ex) {
throw new SaajSoapMessageException("Could not save changes", ex);
}
return saajMessage.getSOAPPart();
}
else if (soapMessage instanceof AxiomSoapMessage) {
AxiomSoapMessage axiomMessage = (AxiomSoapMessage) soapMessage;
@@ -608,7 +616,16 @@ public class Wss4jSecurityInterceptor extends AbstractWsSecurityInterceptor impl
* for a {@link SaajSoapMessage}.
*/
private void replaceMessage(SoapMessage soapMessage, Document envelope) {
if (soapMessage instanceof AxiomSoapMessage) {
if (soapMessage instanceof SaajSoapMessage) {
javax.xml.soap.SOAPMessage saajMessage = ((SaajSoapMessage) soapMessage).getSaajMessage();
try {
saajMessage.saveChanges();
}
catch (SOAPException ex) {
throw new SaajSoapMessageException("Could not save changes", ex);
}
}
else if (soapMessage instanceof AxiomSoapMessage) {
// construct a new Axiom message with the processed envelope
AxiomSoapMessage axiomMessage = (AxiomSoapMessage) soapMessage;
SOAPEnvelope envelopeFromDOMDocument = AxiomUtils.toEnvelope(envelope);

View File

@@ -1,5 +1,46 @@
package org.springframework.ws.soap.security.wss4j;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPMessage;
import org.springframework.ws.context.DefaultMessageContext;
import org.springframework.ws.context.MessageContext;
import org.springframework.ws.soap.SoapMessage;
import org.springframework.ws.soap.saaj.SaajSoapMessage;
import org.springframework.ws.soap.saaj.SaajSoapMessageFactory;
public class SaajWss4jMessageInterceptorSignTest extends Wss4jMessageInterceptorSignTestCase {
public void testSignAndValidate() throws Exception {
MessageFactory messageFactory = MessageFactory.newInstance();
interceptor.setSecurementActions("Signature");
interceptor.setEnableSignatureConfirmation(false);
interceptor.setSecurementPassword("123456");
interceptor.setSecurementUsername("rsaKey");
SOAPMessage saajMessage = messageFactory.createMessage();
saajMessage.getSOAPBody()
.addBodyElement(new QName("http://fabrikam123.com/payloads", "StockSymbol", "tru")).addTextNode("QQQ");
SoapMessage message = new SaajSoapMessage(saajMessage);
MessageContext messageContext = new DefaultMessageContext(message, new SaajSoapMessageFactory(messageFactory));
interceptor.secureMessage(message, messageContext);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
message.writeTo(bos);
MimeHeaders mimeHeaders = new MimeHeaders();
mimeHeaders.addHeader("Content-Type", "text/xml");
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
SOAPMessage signed = messageFactory.createMessage(mimeHeaders, bis);
message = new SaajSoapMessage(signed);
messageContext = new DefaultMessageContext(message, new SaajSoapMessageFactory(messageFactory));
interceptor.validateMessage(message, messageContext);
}
}