You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2017/08/18 20:28:09 UTC

[4/4] cxf git commit: Send auth info with upgrade request for websocket

Send auth info with upgrade request for websocket


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/6259640a
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/6259640a
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/6259640a

Branch: refs/heads/master
Commit: 6259640a6c59fa917c377c060cceeec441043068
Parents: bd0408c
Author: Daniel Kulp <dk...@apache.org>
Authored: Fri Aug 18 14:27:59 2017 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Fri Aug 18 15:28:36 2017 -0400

----------------------------------------------------------------------
 .../websocket/ahc/AhcWebSocketConduit.java      | 39 +++++++++++++++++++-
 .../websocket/ClientServerWebSocketTest.java    |  8 +++-
 2 files changed, 43 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/6259640a/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/ahc/AhcWebSocketConduit.java
----------------------------------------------------------------------
diff --git a/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/ahc/AhcWebSocketConduit.java b/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/ahc/AhcWebSocketConduit.java
index 2e582b8..61f1f9a 100644
--- a/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/ahc/AhcWebSocketConduit.java
+++ b/rt/transports/websocket/src/main/java/org/apache/cxf/transport/websocket/ahc/AhcWebSocketConduit.java
@@ -34,6 +34,9 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import com.ning.http.client.AsyncHttpClient;
+import com.ning.http.client.AsyncHttpClientConfig;
+import com.ning.http.client.Realm.AuthScheme;
+import com.ning.http.client.Realm.RealmBuilder;
 import com.ning.http.client.ws.WebSocket;
 import com.ning.http.client.ws.WebSocketByteListener;
 import com.ning.http.client.ws.WebSocketTextListener;
@@ -41,6 +44,8 @@ import com.ning.http.client.ws.WebSocketUpgradeHandler;
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.common.util.StringUtils;
+import org.apache.cxf.configuration.security.AuthorizationPolicy;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.transport.http.Address;
@@ -69,7 +74,6 @@ public class AhcWebSocketConduit extends URLConnectionHTTPConduit {
 
     public AhcWebSocketConduit(Bus b, EndpointInfo ei, EndpointReferenceType t) throws IOException {
         super(b, ei, t);
-        ahcclient = new AsyncHttpClient();
     }
 
     @Override
@@ -94,11 +98,40 @@ public class AhcWebSocketConduit extends URLConnectionHTTPConduit {
         final int rtimeout = determineReceiveTimeout(message, csPolicy);
         request.setReceiveTimeout(rtimeout);
         message.put(AhcWebSocketConduitRequest.class, request);
+
+
+    }
+    
+    private synchronized AsyncHttpClient getAsyncHttpClient(Message message) {
+        if (ahcclient == null) {
+            AsyncHttpClientConfig.Builder builder = new AsyncHttpClientConfig.Builder();
+            AuthorizationPolicy ap = getEffectiveAuthPolicy(message);
+            if (ap != null 
+                && (!StringUtils.isEmpty(ap.getAuthorizationType())
+                    || !StringUtils.isEmpty(ap.getUserName()))) {
+                RealmBuilder rb = new RealmBuilder();
+                if (ap.getAuthorizationType() == null) {
+                    rb.setScheme(AuthScheme.BASIC);
+                } else {
+                    rb.setScheme(AuthScheme.valueOf(ap.getAuthorizationType().toUpperCase()));
+                }
+                rb.setUsePreemptiveAuth(true);
+                rb.setPassword(ap.getPassword())
+                    .setPrincipal(ap.getUserName());
+                builder.setRealm(rb.build());
+            }
+            
+            AsyncHttpClientConfig config = builder.build();
+            ahcclient = new AsyncHttpClient(config);
+        }
+        return ahcclient;
     }
 
     @Override
     protected OutputStream createOutputStream(Message message, boolean needToCacheRequest,
                                               boolean isChunking, int chunkThreshold) throws IOException {
+
+        
         AhcWebSocketConduitRequest entity = message.get(AhcWebSocketConduitRequest.class);
         return new AhcWebSocketWrappedOutputStream(message, needToCacheRequest, isChunking, chunkThreshold,
                                                    getConduitName(), entity.getUri());
@@ -270,7 +303,9 @@ public class AhcWebSocketConduit extends URLConnectionHTTPConduit {
             LOG.log(Level.FINE, "connecting");
             if (websocket == null) {
                 try {
-                    websocket = ahcclient.prepareGet(url.toASCIIString()).execute(
+                    websocket = getAsyncHttpClient(outMessage)
+                        .prepareGet(url.toASCIIString())
+                        .execute(
                             new WebSocketUpgradeHandler.Builder()
                             .addWebSocketListener(new AhcWebSocketListener()).build()).get();
                     LOG.log(Level.FINE, "connected");

http://git-wip-us.apache.org/repos/asf/cxf/blob/6259640a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/websocket/ClientServerWebSocketTest.java
----------------------------------------------------------------------
diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/websocket/ClientServerWebSocketTest.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/websocket/ClientServerWebSocketTest.java
index ed727ad..0e6d715 100644
--- a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/websocket/ClientServerWebSocketTest.java
+++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/websocket/ClientServerWebSocketTest.java
@@ -19,6 +19,7 @@
 
 package org.apache.cxf.systest.jaxws.websocket;
 
+import java.io.Closeable;
 import java.lang.reflect.UndeclaredThrowableException;
 import java.net.URL;
 import java.util.Map;
@@ -219,7 +220,6 @@ public class ClientServerWebSocketTest extends AbstractBusClientServerTestBase {
     }
 
     @Test
-    @org.junit.Ignore //TODO need to pass the principal of the original upgrade request to its subsequent service calls
     public void testBasicAuth() throws Exception {
         URL wsdl = getClass().getResource("/wsdl/hello_world.wsdl");
         assertNotNull(wsdl);
@@ -237,7 +237,10 @@ public class ClientServerWebSocketTest extends AbstractBusClientServerTestBase {
             assertEquals("Hello BJ", s);
             bp.getRequestContext().remove(BindingProvider.USERNAME_PROPERTY);
             bp.getRequestContext().remove(BindingProvider.PASSWORD_PROPERTY);
-
+            ((Closeable)greeter).close();
+            
+            greeter = service.getPort(portName, Greeter.class);
+            updateGreeterAddress(greeter, PORT);
             //try setting on the conduit directly
             Client client = ClientProxy.getClient(greeter);
             HTTPConduit httpConduit = (HTTPConduit)client.getConduit();
@@ -247,6 +250,7 @@ public class ClientServerWebSocketTest extends AbstractBusClientServerTestBase {
             httpConduit.setAuthorization(policy);
 
             s = greeter.greetMe("secure");
+            ((Closeable)greeter).close();
             assertEquals("Hello BJ2", s);
         } catch (UndeclaredThrowableException ex) {
             throw (Exception)ex.getCause();