You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by co...@apache.org on 2013/07/12 13:53:24 UTC
svn commit: r1502521 - in /cxf/trunk:
rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/
systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/
systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/
Author: coheigea
Date: Fri Jul 12 11:53:24 2013
New Revision: 1502521
URL: http://svn.apache.org/r1502521
Log:
More tests
Added:
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/StaxServer.java
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/StaxWSSecurityClientTest.java
- copied, changed from r1502505, cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/WSSecurityClientTest.java
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/stax-server.xml
- copied, changed from r1502505, cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/server.xml
Modified:
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JStaxInterceptor.java
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/WSSecurityClientTest.java
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/client.xml
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/server.xml
Modified: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JStaxInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JStaxInterceptor.java?rev=1502521&r1=1502520&r2=1502521&view=diff
==============================================================================
--- cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JStaxInterceptor.java (original)
+++ cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JStaxInterceptor.java Fri Jul 12 11:53:24 2013
@@ -18,6 +18,7 @@
*/
package org.apache.cxf.ws.security.wss4j;
+import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URL;
@@ -29,7 +30,9 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger;
+import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.UnsupportedCallbackException;
import javax.xml.namespace.QName;
import org.apache.cxf.binding.soap.SoapMessage;
@@ -50,6 +53,7 @@ import org.apache.cxf.ws.security.tokens
import org.apache.wss4j.common.ConfigurationConstants;
import org.apache.wss4j.common.crypto.Crypto;
import org.apache.wss4j.common.crypto.CryptoFactory;
+import org.apache.wss4j.common.ext.WSPasswordCallback;
import org.apache.wss4j.common.ext.WSSecurityException;
import org.apache.wss4j.common.util.Loader;
import org.apache.wss4j.stax.ext.WSSConstants;
@@ -179,6 +183,24 @@ public abstract class AbstractWSS4JStaxI
throw new WSSecurityException(WSSecurityException.ErrorCode.FAILURE, e);
}
}
+
+ // If we have a "password" but no CallbackHandler then construct one
+ if (o == null && getPassword(soapMessage) != null) {
+ final String password = getPassword(soapMessage);
+ o = new CallbackHandler() {
+
+ @Override
+ public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
+ for (Callback callback : callbacks) {
+ if (callback instanceof WSPasswordCallback) {
+ WSPasswordCallback wsPasswordCallback = (WSPasswordCallback)callback;
+ wsPasswordCallback.setPassword(password);
+ }
+ }
+ }
+ };
+ }
+
if (o instanceof CallbackHandler) {
Map<String, Object> config = getProperties();
Added: cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/StaxServer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/StaxServer.java?rev=1502521&view=auto
==============================================================================
--- cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/StaxServer.java (added)
+++ cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/StaxServer.java Fri Jul 12 11:53:24 2013
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.systest.ws.security;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.bus.spring.SpringBusFactory;
+import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
+
+public class StaxServer extends AbstractBusTestServerBase {
+ public static final String PORT = allocatePort(StaxServer.class);
+
+ protected void run() {
+ SpringBusFactory factory = new SpringBusFactory();
+ Bus bus = factory.createBus(
+ "org/apache/cxf/systest/ws/security/stax-server.xml"
+ );
+ BusFactory.setDefaultBus(bus);
+ setBus(bus);
+ }
+
+ public static void main(String[] args) {
+ try {
+ StaxServer s = new StaxServer();
+ s.start();
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ System.exit(-1);
+ } finally {
+ System.out.println("done!");
+ }
+ }
+}
Copied: cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/StaxWSSecurityClientTest.java (from r1502505, cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/WSSecurityClientTest.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/StaxWSSecurityClientTest.java?p2=cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/StaxWSSecurityClientTest.java&p1=cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/WSSecurityClientTest.java&r1=1502505&r2=1502521&rev=1502521&view=diff
==============================================================================
--- cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/WSSecurityClientTest.java (original)
+++ cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/StaxWSSecurityClientTest.java Fri Jul 12 11:53:24 2013
@@ -52,23 +52,23 @@ import org.apache.cxf.systest.ws.common.
import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
+import org.apache.cxf.ws.security.wss4j.WSS4JStaxOutInterceptor;
import org.apache.hello_world_soap_http.Greeter;
-
import org.junit.BeforeClass;
import org.junit.Test;
/**
*
*/
-public class WSSecurityClientTest extends AbstractBusClientServerTestBase {
- public static final String PORT = allocatePort(Server.class);
- public static final String DEC_PORT = allocatePort(WSSecurityClientTest.class);
+public class StaxWSSecurityClientTest extends AbstractBusClientServerTestBase {
+ public static final String PORT = allocatePort(StaxServer.class);
+ public static final String DEC_PORT = allocatePort(StaxWSSecurityClientTest.class);
private static final java.net.URL WSDL_LOC;
static {
java.net.URL tmp = null;
try {
- tmp = WSSecurityClientTest.class.getClassLoader().getResource(
+ tmp = StaxWSSecurityClientTest.class.getClassLoader().getResource(
"org/apache/cxf/systest/ws/security/hello_world.wsdl"
);
} catch (final Exception e) {
@@ -101,7 +101,7 @@ public class WSSecurityClientTest extend
"Server failed to launch",
// run the server in the same process
// set this to false to fork
- launchServer(Server.class, true)
+ launchServer(StaxServer.class, true)
);
createStaticBus();
}
@@ -159,6 +159,64 @@ public class WSSecurityClientTest extend
((java.io.Closeable)greeter).close();
}
+
+ @Test
+ public void testUsernameTokenStreaming() throws Exception {
+ final javax.xml.ws.Service svc
+ = javax.xml.ws.Service.create(WSDL_LOC, GREETER_SERVICE_QNAME);
+ final Greeter greeter = svc.getPort(USERNAME_TOKEN_PORT_QNAME, Greeter.class);
+ updateAddressPort(greeter, PORT);
+
+ Client client = ClientProxy.getClient(greeter);
+ Map<String, Object> props = new HashMap<String, Object>();
+ props.put("action", "UsernameToken");
+ props.put("user", "alice");
+ props.put("passwordType", "PasswordText");
+ WSS4JStaxOutInterceptor wss4jOut = new WSS4JStaxOutInterceptor(props);
+
+ client.getOutInterceptors().add(wss4jOut);
+
+ ((BindingProvider)greeter).getRequestContext().put("password", "password");
+
+ try {
+ greeter.greetMe("CXF");
+ fail("should fail because of password text instead of digest");
+ } catch (Exception ex) {
+ //expected
+ }
+ client.getOutInterceptors().remove(wss4jOut);
+
+ props.put("passwordType", "PasswordDigest");
+ wss4jOut = new WSS4JStaxOutInterceptor(props);
+ client.getOutInterceptors().add(wss4jOut);
+ String s = greeter.greetMe("CXF");
+ assertEquals("Hello CXF", s);
+ client.getOutInterceptors().remove(wss4jOut);
+
+ try {
+ ((BindingProvider)greeter).getRequestContext().put("password", "foo");
+ wss4jOut = new WSS4JStaxOutInterceptor(props);
+ client.getOutInterceptors().add(wss4jOut);
+ greeter.greetMe("CXF");
+ fail("should fail");
+ } catch (Exception ex) {
+ //expected
+ }
+ client.getOutInterceptors().remove(wss4jOut);
+ try {
+ props.put("passwordType", "PasswordText");
+ wss4jOut = new WSS4JStaxOutInterceptor(props);
+ client.getOutInterceptors().add(wss4jOut);
+ ((BindingProvider)greeter).getRequestContext().put("password", "password");
+ greeter.greetMe("CXF");
+ fail("should fail");
+ } catch (Exception ex) {
+ //expected
+ }
+ client.getOutInterceptors().remove(wss4jOut);
+
+ ((java.io.Closeable)greeter).close();
+ }
@Test
public void testTimestampSignEncrypt() throws Exception {
Modified: cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/WSSecurityClientTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/WSSecurityClientTest.java?rev=1502521&r1=1502520&r2=1502521&view=diff
==============================================================================
--- cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/WSSecurityClientTest.java (original)
+++ cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/WSSecurityClientTest.java Fri Jul 12 11:53:24 2013
@@ -52,8 +52,8 @@ import org.apache.cxf.systest.ws.common.
import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
+import org.apache.cxf.ws.security.wss4j.WSS4JStaxOutInterceptor;
import org.apache.hello_world_soap_http.Greeter;
-
import org.junit.BeforeClass;
import org.junit.Test;
@@ -159,6 +159,64 @@ public class WSSecurityClientTest extend
((java.io.Closeable)greeter).close();
}
+
+ @Test
+ public void testUsernameTokenStreaming() throws Exception {
+ final javax.xml.ws.Service svc
+ = javax.xml.ws.Service.create(WSDL_LOC, GREETER_SERVICE_QNAME);
+ final Greeter greeter = svc.getPort(USERNAME_TOKEN_PORT_QNAME, Greeter.class);
+ updateAddressPort(greeter, PORT);
+
+ Client client = ClientProxy.getClient(greeter);
+ Map<String, Object> props = new HashMap<String, Object>();
+ props.put("action", "UsernameToken");
+ props.put("user", "alice");
+ props.put("passwordType", "PasswordText");
+ WSS4JStaxOutInterceptor wss4jOut = new WSS4JStaxOutInterceptor(props);
+
+ client.getOutInterceptors().add(wss4jOut);
+
+ ((BindingProvider)greeter).getRequestContext().put("password", "password");
+
+ try {
+ greeter.greetMe("CXF");
+ fail("should fail because of password text instead of digest");
+ } catch (Exception ex) {
+ //expected
+ }
+ client.getOutInterceptors().remove(wss4jOut);
+
+ props.put("passwordType", "PasswordDigest");
+ wss4jOut = new WSS4JStaxOutInterceptor(props);
+ client.getOutInterceptors().add(wss4jOut);
+ String s = greeter.greetMe("CXF");
+ assertEquals("Hello CXF", s);
+ client.getOutInterceptors().remove(wss4jOut);
+
+ try {
+ ((BindingProvider)greeter).getRequestContext().put("password", "foo");
+ wss4jOut = new WSS4JStaxOutInterceptor(props);
+ client.getOutInterceptors().add(wss4jOut);
+ greeter.greetMe("CXF");
+ fail("should fail");
+ } catch (Exception ex) {
+ //expected
+ }
+ client.getOutInterceptors().remove(wss4jOut);
+ try {
+ props.put("passwordType", "PasswordText");
+ wss4jOut = new WSS4JStaxOutInterceptor(props);
+ client.getOutInterceptors().add(wss4jOut);
+ ((BindingProvider)greeter).getRequestContext().put("password", "password");
+ greeter.greetMe("CXF");
+ fail("should fail");
+ } catch (Exception ex) {
+ //expected
+ }
+ client.getOutInterceptors().remove(wss4jOut);
+
+ ((java.io.Closeable)greeter).close();
+ }
@Test
public void testTimestampSignEncrypt() throws Exception {
Modified: cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/client.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/client.xml?rev=1502521&r1=1502520&r2=1502521&view=diff
==============================================================================
--- cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/client.xml (original)
+++ cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/client.xml Fri Jul 12 11:53:24 2013
@@ -35,12 +35,10 @@
<bean class="org.apache.cxf.feature.LoggingFeature"/>
</jaxws:features>
<jaxws:outInterceptors>
- <bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor"/>
<ref bean="TimestampSignEncrypt_Request"/>
</jaxws:outInterceptors>
<jaxws:inInterceptors>
<ref bean="TimestampSignEncrypt_Response"/>
- <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor"/>
</jaxws:inInterceptors>
</jaxws:client>
Modified: cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/server.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/server.xml?rev=1502521&r1=1502520&r2=1502521&view=diff
==============================================================================
--- cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/server.xml (original)
+++ cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/server.xml Fri Jul 12 11:53:24 2013
@@ -60,7 +60,6 @@
</jaxws:features>
<jaxws:inInterceptors>
<ref bean="UsernameToken_Request"/>
- <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor"/>
</jaxws:inInterceptors>
</jaxws:endpoint>
@@ -93,12 +92,10 @@
endpointName="test:TimestampSignEncryptPort"
>
<jaxws:outInterceptors>
- <bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor"/>
<ref bean="TimestampSignEncrypt_Response"/>
</jaxws:outInterceptors>
<jaxws:inInterceptors>
<ref bean="TimestampSignEncrypt_Request"/>
- <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor"/>
</jaxws:inInterceptors>
</jaxws:endpoint>
Copied: cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/stax-server.xml (from r1502505, cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/server.xml)
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/stax-server.xml?p2=cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/stax-server.xml&p1=cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/server.xml&r1=1502505&r2=1502521&rev=1502521&view=diff
==============================================================================
--- cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/server.xml (original)
+++ cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/stax-server.xml Fri Jul 12 11:53:24 2013
@@ -51,7 +51,7 @@
<jaxws:endpoint
id="UsernameTokenEndpoint"
implementor="org.apache.cxf.systest.ws.security.GreeterImpl"
- address="http://localhost:${testutil.ports.Server}/GreeterService/UsernameTokenPort"
+ address="http://localhost:${testutil.ports.StaxServer}/GreeterService/UsernameTokenPort"
serviceName="test:GreeterService"
endpointName="test:UsernameTokenPort"
>
@@ -60,16 +60,15 @@
</jaxws:features>
<jaxws:inInterceptors>
<ref bean="UsernameToken_Request"/>
- <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor"/>
</jaxws:inInterceptors>
</jaxws:endpoint>
<!--
- WSS4JInInterceptor for UsernameTokenEndpoint above
+ WSS4JStaxInInterceptor for UsernameTokenEndpoint above
-->
<bean
id="UsernameToken_Request"
- class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"
+ class="org.apache.cxf.ws.security.wss4j.WSS4JStaxInInterceptor"
>
<constructor-arg>
<map>
@@ -88,27 +87,25 @@
<jaxws:endpoint
id="TimestampSignEncryptEndpoint"
implementor="org.apache.cxf.systest.ws.security.GreeterImpl"
- address="http://localhost:${testutil.ports.Server}/GreeterService/TimestampSignEncryptPort"
+ address="http://localhost:${testutil.ports.StaxServer}/GreeterService/TimestampSignEncryptPort"
serviceName="test:GreeterService"
endpointName="test:TimestampSignEncryptPort"
>
<jaxws:outInterceptors>
- <bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor"/>
<ref bean="TimestampSignEncrypt_Response"/>
</jaxws:outInterceptors>
<jaxws:inInterceptors>
<ref bean="TimestampSignEncrypt_Request"/>
- <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor"/>
</jaxws:inInterceptors>
</jaxws:endpoint>
<!--
- WSS4JInInterceptor for decrypting and validating the signature of the
+ WSS4JStaxInInterceptor for decrypting and validating the signature of the
SOAP request.
-->
<bean
id="TimestampSignEncrypt_Request"
- class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"
+ class="org.apache.cxf.ws.security.wss4j.WSS4JStaxInInterceptor"
>
<constructor-arg>
<map>
@@ -125,11 +122,11 @@
</bean>
<!--
- WSS4JOutInterceptor for encoding and signing the SOAP response.
+ WSS4JStaxOutInterceptor for encoding and signing the SOAP response.
-->
<bean
id="TimestampSignEncrypt_Response"
- class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor"
+ class="org.apache.cxf.ws.security.wss4j.WSS4JStaxOutInterceptor"
>
<constructor-arg>
<map>