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();