Author: alessio.soldano(a)jboss.com
Date: 2008-03-10 06:38:31 -0400 (Mon, 10 Mar 2008)
New Revision: 5900
Modified:
stack/native/trunk/src/main/java/org/jboss/ws/extensions/security/WSSecurityAPI.java
stack/native/trunk/src/main/java/org/jboss/ws/extensions/security/WSSecurityDispatcher.java
stack/native/trunk/src/main/java/org/jboss/ws/extensions/security/jaxrpc/WSSecurityHandler.java
stack/native/trunk/src/main/java/org/jboss/ws/extensions/security/jaxws/WSSecurityHandler.java
stack/native/trunk/src/test/java/org/jboss/test/ws/jaxrpc/wsse/RoundTripTestCase.java
Log:
[JBWS-2022] Provide interface for WSSecurityDispatcher
Modified:
stack/native/trunk/src/main/java/org/jboss/ws/extensions/security/WSSecurityAPI.java
===================================================================
---
stack/native/trunk/src/main/java/org/jboss/ws/extensions/security/WSSecurityAPI.java 2008-03-08
19:50:10 UTC (rev 5899)
+++
stack/native/trunk/src/main/java/org/jboss/ws/extensions/security/WSSecurityAPI.java 2008-03-10
10:38:31 UTC (rev 5900)
@@ -29,6 +29,12 @@
import org.jboss.ws.metadata.wsse.Config;
import org.jboss.ws.metadata.wsse.WSSecurityConfiguration;
+/**
+ * WS-Security functionalities interface
+ *
+ * @author alessio.soldano(a)jboss.com
+ * @since 06-Mar-2008
+ */
public interface WSSecurityAPI
{
/**
Modified:
stack/native/trunk/src/main/java/org/jboss/ws/extensions/security/WSSecurityDispatcher.java
===================================================================
---
stack/native/trunk/src/main/java/org/jboss/ws/extensions/security/WSSecurityDispatcher.java 2008-03-08
19:50:10 UTC (rev 5899)
+++
stack/native/trunk/src/main/java/org/jboss/ws/extensions/security/WSSecurityDispatcher.java 2008-03-10
10:38:31 UTC (rev 5900)
@@ -27,18 +27,12 @@
import java.util.List;
import javax.xml.namespace.QName;
-import javax.xml.rpc.Stub;
-import javax.xml.rpc.soap.SOAPFaultException;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
-import javax.xml.ws.BindingProvider;
import org.jboss.logging.Logger;
-import org.jboss.ws.WSException;
-import org.jboss.ws.core.CommonMessageContext;
import org.jboss.ws.core.CommonSOAPFaultException;
-import org.jboss.ws.core.soap.SOAPMessageImpl;
import org.jboss.ws.extensions.security.exception.InvalidSecurityHeaderException;
import org.jboss.ws.extensions.security.exception.WSSecurityException;
import org.jboss.ws.metadata.wsse.Config;
@@ -86,23 +80,6 @@
return new CommonSOAPFaultException(e.getFaultCode(), e.getFaultString());
}
- public static void handleInbound(CommonMessageContext ctx) throws SOAPException,
SOAPFaultException
- {
- WSSecurityConfiguration configuration = getSecurityConfig(ctx);
- SOAPMessageImpl soapMessage = (SOAPMessageImpl)ctx.getSOAPMessage();
-
- new WSSecurityDispatcher().decodeMessage(configuration, soapMessage, new
MessageContextConfigSelector(ctx)); //TODO!!!
- }
-
- private static WSSecurityConfiguration getSecurityConfig(CommonMessageContext ctx)
- {
- WSSecurityConfiguration config =
ctx.getEndpointMetaData().getServiceMetaData().getSecurityConfiguration();
- if (config == null)
- throw new WSException("Cannot obtain security configuration from message
context");
-
- return config;
- }
-
private static List<OperationDescription<RequireOperation>>
buildRequireOperations(Config operationConfig)
{
if (operationConfig == null)
@@ -134,25 +111,8 @@
return operations;
}
- public static void handleOutbound(CommonMessageContext ctx) throws SOAPException,
SOAPFaultException
+ private static Config getActualConfig(WSSecurityConfiguration configuration, Config
operationConfig)
{
- WSSecurityConfiguration configuration = getSecurityConfig(ctx);
- SOAPMessageImpl soapMessage = (SOAPMessageImpl)ctx.getSOAPMessage();
-
- String user = (String)ctx.get(Stub.USERNAME_PROPERTY);
- String pass = (String)ctx.get(Stub.PASSWORD_PROPERTY);
-
- if (user == null && pass == null)
- {
- user = (String)ctx.get(BindingProvider.USERNAME_PROPERTY);
- pass = (String)ctx.get(BindingProvider.PASSWORD_PROPERTY);
- }
-
- new WSSecurityDispatcher().encodeMessage(configuration, soapMessage, new
MessageContextConfigSelector(ctx), user, pass); //TODO!!
- }
-
- private static Config getConfig(WSSecurityConfiguration configuration, Config
operationConfig)
- {
//null operationConfig means default behavior
return operationConfig != null ? operationConfig :
configuration.getDefaultConfig();
}
@@ -164,7 +124,7 @@
public void decodeMessage(WSSecurityConfiguration configuration, SOAPMessage message,
Config operationConfig) throws SOAPException
{
- Config config = getConfig(configuration, operationConfig);
+ Config config = getActualConfig(configuration, operationConfig);
SOAPHeader soapHeader = message.getSOAPHeader();
QName secQName = new QName(Constants.WSSE_NS, "Security");
Element secHeaderElement = (soapHeader != null) ? Util.findElement(soapHeader,
secQName) : null;
@@ -212,7 +172,7 @@
public void encodeMessage(WSSecurityConfiguration configuration, SOAPMessage message,
Config operationConfig, String user, String password) throws SOAPException
{
- Config config = getConfig(configuration, operationConfig);
+ Config config = getActualConfig(configuration, operationConfig);
log.debug("WS-Security config: " + config);
// Nothing to process
Modified:
stack/native/trunk/src/main/java/org/jboss/ws/extensions/security/jaxrpc/WSSecurityHandler.java
===================================================================
---
stack/native/trunk/src/main/java/org/jboss/ws/extensions/security/jaxrpc/WSSecurityHandler.java 2008-03-08
19:50:10 UTC (rev 5899)
+++
stack/native/trunk/src/main/java/org/jboss/ws/extensions/security/jaxrpc/WSSecurityHandler.java 2008-03-10
10:38:31 UTC (rev 5900)
@@ -26,6 +26,7 @@
import java.io.IOException;
import javax.xml.namespace.QName;
+import javax.xml.rpc.Stub;
import javax.xml.rpc.handler.GenericHandler;
import javax.xml.rpc.handler.MessageContext;
import javax.xml.soap.SOAPException;
@@ -33,7 +34,9 @@
import org.jboss.logging.Logger;
import org.jboss.ws.WSException;
import org.jboss.ws.core.CommonMessageContext;
+import org.jboss.ws.core.soap.SOAPMessageImpl;
import org.jboss.ws.extensions.security.Constants;
+import org.jboss.ws.extensions.security.MessageContextConfigSelector;
import org.jboss.ws.extensions.security.WSSecurityDispatcher;
import org.jboss.ws.metadata.umdm.EndpointMetaData;
import org.jboss.ws.metadata.umdm.ServiceMetaData;
@@ -61,9 +64,13 @@
{
try
{
- if (getSecurityConfiguration(msgContext) != null)
+ WSSecurityConfiguration configuration = getSecurityConfiguration(msgContext);
+ if (configuration != null)
{
- WSSecurityDispatcher.handleInbound((CommonMessageContext)msgContext);
+ CommonMessageContext ctx = (CommonMessageContext)msgContext;
+ SOAPMessageImpl soapMessage = (SOAPMessageImpl)ctx.getSOAPMessage();
+
+ new WSSecurityDispatcher().decodeMessage(configuration, soapMessage, new
MessageContextConfigSelector(ctx));
}
}
catch (SOAPException ex)
@@ -78,9 +85,15 @@
{
try
{
- if (getSecurityConfiguration(msgContext) != null)
+ WSSecurityConfiguration configuration = getSecurityConfiguration(msgContext);
+ if (configuration != null)
{
- WSSecurityDispatcher.handleOutbound((CommonMessageContext)msgContext);
+ CommonMessageContext ctx = (CommonMessageContext)msgContext;
+ SOAPMessageImpl soapMessage = (SOAPMessageImpl)ctx.getSOAPMessage();
+
+ String user = (String)ctx.get(Stub.USERNAME_PROPERTY);
+ String pass = (String)ctx.get(Stub.PASSWORD_PROPERTY);
+ new WSSecurityDispatcher().encodeMessage(configuration, soapMessage, new
MessageContextConfigSelector(ctx), user, pass);
}
}
catch (SOAPException ex)
Modified:
stack/native/trunk/src/main/java/org/jboss/ws/extensions/security/jaxws/WSSecurityHandler.java
===================================================================
---
stack/native/trunk/src/main/java/org/jboss/ws/extensions/security/jaxws/WSSecurityHandler.java 2008-03-08
19:50:10 UTC (rev 5899)
+++
stack/native/trunk/src/main/java/org/jboss/ws/extensions/security/jaxws/WSSecurityHandler.java 2008-03-10
10:38:31 UTC (rev 5900)
@@ -30,13 +30,16 @@
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPException;
+import javax.xml.ws.BindingProvider;
import javax.xml.ws.handler.MessageContext;
import org.jboss.logging.Logger;
import org.jboss.ws.WSException;
import org.jboss.ws.core.CommonMessageContext;
import org.jboss.ws.core.jaxws.handler.GenericSOAPHandler;
+import org.jboss.ws.core.soap.SOAPMessageImpl;
import org.jboss.ws.extensions.security.Constants;
+import org.jboss.ws.extensions.security.MessageContextConfigSelector;
import org.jboss.ws.extensions.security.WSSecurityDispatcher;
import org.jboss.ws.metadata.umdm.EndpointMetaData;
import org.jboss.ws.metadata.umdm.ServiceMetaData;
@@ -73,9 +76,13 @@
{
try
{
- if (getSecurityConfiguration(msgContext) != null)
+ WSSecurityConfiguration configuration = getSecurityConfiguration(msgContext);
+ if (configuration != null)
{
- WSSecurityDispatcher.handleInbound((CommonMessageContext)msgContext);
+ CommonMessageContext ctx = (CommonMessageContext)msgContext;
+ SOAPMessageImpl soapMessage = (SOAPMessageImpl)ctx.getSOAPMessage();
+
+ new WSSecurityDispatcher().decodeMessage(configuration, soapMessage, new
MessageContextConfigSelector(ctx));
}
}
catch (SOAPException ex)
@@ -90,9 +97,15 @@
{
try
{
- if (getSecurityConfiguration(msgContext) != null)
+ WSSecurityConfiguration configuration = getSecurityConfiguration(msgContext);
+ if (configuration != null)
{
- WSSecurityDispatcher.handleOutbound((CommonMessageContext)msgContext);
+ CommonMessageContext ctx = (CommonMessageContext)msgContext;
+ SOAPMessageImpl soapMessage = (SOAPMessageImpl)ctx.getSOAPMessage();
+
+ String user = (String)ctx.get(BindingProvider.USERNAME_PROPERTY);
+ String pass = (String)ctx.get(BindingProvider.PASSWORD_PROPERTY);
+ new WSSecurityDispatcher().encodeMessage(configuration, soapMessage, new
MessageContextConfigSelector(ctx), user, pass);
}
}
catch (SOAPException ex)
Modified:
stack/native/trunk/src/test/java/org/jboss/test/ws/jaxrpc/wsse/RoundTripTestCase.java
===================================================================
---
stack/native/trunk/src/test/java/org/jboss/test/ws/jaxrpc/wsse/RoundTripTestCase.java 2008-03-08
19:50:10 UTC (rev 5899)
+++
stack/native/trunk/src/test/java/org/jboss/test/ws/jaxrpc/wsse/RoundTripTestCase.java 2008-03-10
10:38:31 UTC (rev 5900)
@@ -23,6 +23,7 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.io.StringReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
@@ -47,9 +48,13 @@
import org.jboss.ws.extensions.security.Target;
import org.jboss.ws.extensions.security.TimestampOperation;
import org.jboss.ws.extensions.security.Util;
+import org.jboss.ws.extensions.security.WSSecurityAPI;
+import org.jboss.ws.extensions.security.WSSecurityDispatcher;
import org.jboss.ws.extensions.security.WsuIdTarget;
+import org.jboss.ws.metadata.wsse.WSSecurityConfiguration;
+import org.jboss.ws.metadata.wsse.WSSecurityOMFactory;
+import org.jboss.wsf.common.DOMWriter;
import org.jboss.wsf.test.JBossWSTest;
-import org.jboss.wsf.common.DOMWriter;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -71,7 +76,6 @@
+ "</env:Envelope>";
ByteArrayInputStream inputStream = new ByteArrayInputStream(envStr.getBytes());
-
MessageFactory factory = new MessageFactoryImpl();
SOAPMessage soapMsg = factory.createMessage(null, inputStream);
SOAPEnvelope env = soapMsg.getSOAPPart().getEnvelope();
@@ -103,8 +107,52 @@
assertEquals(inputString, DOMWriter.printNode(doc, true));
}
+
+ public void testRoundTripUsingAPI() throws Exception
+ {
+ String envStr = "<env:Envelope
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>"
+ + " <env:Header>"
+ + " <tns:someHeader
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'"
+ + " tns:test='hi'
xmlns:tns='http://org.jboss.ws/2004'>some header
value</tns:someHeader>"
+ + " </env:Header> "
+ + " <env:Body wsu:Id='element-9-1205139829909-17908832'
xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-ws...
+ + " <tns:echoString2
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:tns='http://org.jboss.ws/2004' "
+ + "
xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-ws...
+ + " <string>Hello World!</string>"
+ + " </tns:echoString2>"
+ + " <tns:echoString
xmlns:tns='http://org.jboss.ws/2004'>"
+ + " <string>Hello World!</string>"
+ + " </tns:echoString>"
+ + " </env:Body>"
+ + "</env:Envelope>";
- // WS-Security leaves wsu:id attributes arround on elements which are not cleaned
+ String conf = "<jboss-ws-security
xmlns='http://www.jboss.com/ws-security/config'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'"
+ + "
xsi:schemaLocation='http://www.jboss.com/ws-security/config
http://www.jboss.com/ws-security/schema/jboss-ws-security_1_0.xsd'>...
+ + " <config>"
+ + " <encrypt type='x509v3' alias='wsse'/>"
+ + " <sign alias='wsse'/>"
+ + " <username/>"
+ + " <requires>"
+ + " <encryption/>"
+ + " <signature/>"
+ + " </requires>"
+ + " </config>"
+ + "</jboss-ws-security>";
+ WSSecurityConfiguration configuration = WSSecurityOMFactory.newInstance().parse(new
StringReader(conf));
+ ByteArrayInputStream inputStream = new ByteArrayInputStream(envStr.getBytes());
+ MessageFactory factory = new MessageFactoryImpl();
+ SOAPMessage soapMsg = factory.createMessage(null, inputStream);
+ String expected = DOMWriter.printNode(soapMsg.getSOAPPart().getEnvelope(), true);
+
+ WSSecurityAPI sec = new WSSecurityDispatcher();
+ sec.encodeMessage(configuration, soapMsg, null, "kermit",
"thefrog");
+ sec.decodeMessage(configuration, soapMsg, null);
+
+ String actual = DOMWriter.printNode(soapMsg.getSOAPPart().getEnvelope(), true);
+ assertEquals(expected, actual);
+ }
+
+ // WS-Security leaves wsu:id attributes around on elements which are not cleaned
// up due to performance reasons. This, however, breaks comparisons, so we manually
// fix this for tests.
private void cleanupWsuIds(Element element)