You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2016/12/05 10:48:45 UTC
tomee git commit: TOMEE-1980 supporting basic.username and
basic.password in the http url (provider url)
Repository: tomee
Updated Branches:
refs/heads/master 52067addf -> 61c6522b3
TOMEE-1980 supporting basic.username and basic.password in the http url (provider url)
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/61c6522b
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/61c6522b
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/61c6522b
Branch: refs/heads/master
Commit: 61c6522b32b7b77ba0ec42b8155bc6863d826121
Parents: 52067ad
Author: rmannibucau <rm...@apache.org>
Authored: Mon Dec 5 11:48:38 2016 +0100
Committer: rmannibucau <rm...@apache.org>
Committed: Mon Dec 5 11:48:38 2016 +0100
----------------------------------------------------------------------
.../openejb/client/HttpConnectionFactory.java | 37 +++++++++++++++----
.../openejb/client/HttpConnectionTest.java | 38 +++++++++++++++++++-
2 files changed, 67 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/61c6522b/server/openejb-client/src/main/java/org/apache/openejb/client/HttpConnectionFactory.java
----------------------------------------------------------------------
diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/HttpConnectionFactory.java b/server/openejb-client/src/main/java/org/apache/openejb/client/HttpConnectionFactory.java
index a623a22..2abca67 100644
--- a/server/openejb-client/src/main/java/org/apache/openejb/client/HttpConnectionFactory.java
+++ b/server/openejb-client/src/main/java/org/apache/openejb/client/HttpConnectionFactory.java
@@ -26,6 +26,7 @@ import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
+import java.nio.charset.StandardCharsets;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
@@ -34,6 +35,8 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ConcurrentMap;
+import static javax.xml.bind.DatatypeConverter.printBase64Binary;
+
/**
* @version $Revision$ $Date$
*/
@@ -75,10 +78,26 @@ public class HttpConnectionFactory implements ConnectionFactory {
throw new IllegalArgumentException("Invalid uri " + uri.toString(), e);
}
- final String authorization = params.get("authorization");
+ final String basicUsername = params.get("basic.username");
+ final String basicPassword = params.get("basic.password");
+ final String authorizationHeader = params.get("authorizationHeader");
+ String authorization = params.get("authorization");
+ if (authorization != null && basicUsername != null) {
+ throw new IllegalArgumentException("You can't set basic.* properties AND authorization on the provider url");
+ }
+ if (authorization == null && basicUsername != null) {
+ authorization = "Basic " + printBase64Binary((basicUsername + (basicPassword != null ? ":" + basicPassword : "")).getBytes(StandardCharsets.UTF_8));
+ }
- httpURLConnection = (HttpURLConnection) (authorization == null ?
- url : new URL(stripQuery(url.toExternalForm(), "authorization"))).openConnection();
+ final String newUrl =
+ stripQuery(
+ stripQuery(
+ stripQuery(
+ stripQuery(url.toExternalForm(), "authorization"),
+ "basic.username"),
+ "basic.password"),
+ "authorizationHeader");
+ httpURLConnection = (HttpURLConnection) (authorization == null ? url : new URL(newUrl)).openConnection();
httpURLConnection.setDoOutput(true);
final int timeout;
@@ -94,7 +113,7 @@ public class HttpConnectionFactory implements ConnectionFactory {
httpURLConnection.setReadTimeout(Integer.parseInt(params.get("readTimeout")));
}
if (authorization != null) {
- httpURLConnection.setRequestProperty("Authorization", authorization);
+ httpURLConnection.setRequestProperty(authorizationHeader == null ? "Authorization" : authorizationHeader, authorization);
}
if (params.containsKey("sslKeyStore") || params.containsKey("sslTrustStore")) {
@@ -125,11 +144,15 @@ public class HttpConnectionFactory implements ConnectionFactory {
String result = url;
do {
final int h = result.indexOf(param + '=');
- final int end = result.indexOf('&', h);
+ int end = result.indexOf('&', h);
+ if (end < 0) {
+ end = result.length();
+ }
if (h <= 0) {
- return result;
+ return result.endsWith("?") ? result.substring(0, result.length() - 1) : result;
}
- result = result.substring(0, h - 1) + (end < 0 ? "" : result.substring(end + 1, result.length()));
+ result = result.substring(0, h) +
+ (end < 0 || end == result.length() ? "" : result.substring(end + 1, result.length()));
} while (true);
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/61c6522b/server/openejb-client/src/test/java/org/apache/openejb/client/HttpConnectionTest.java
----------------------------------------------------------------------
diff --git a/server/openejb-client/src/test/java/org/apache/openejb/client/HttpConnectionTest.java b/server/openejb-client/src/test/java/org/apache/openejb/client/HttpConnectionTest.java
index 1f6717e..4df016a 100644
--- a/server/openejb-client/src/test/java/org/apache/openejb/client/HttpConnectionTest.java
+++ b/server/openejb-client/src/test/java/org/apache/openejb/client/HttpConnectionTest.java
@@ -56,6 +56,10 @@ public class HttpConnectionTest {
if (authorization != null) {
responseBody.write(authorization.getBytes("UTF-8"));
}
+ final String authorization2 = exchange.getRequestHeaders().getFirst("AltAuthorization");
+ if (authorization2 != null) {
+ responseBody.write(("alt" + authorization2).getBytes("UTF-8"));
+ }
responseBody.close();
}
});
@@ -132,6 +136,38 @@ public class HttpConnectionTest {
}
@Test
+ public void httpBasicSpecificConfig() throws URISyntaxException, IOException {
+ final HttpConnectionFactory factory = new HttpConnectionFactory();
+ final String url = "http://localhost:" + server.getAddress().getPort() + "/e?basic.password=pwd&basic.username=test&authorizationHeader=AltAuthorization";
+ for (int i = 0; i < 3; i++) {
+ final Connection connection = factory.getConnection(new URI(url));
+
+ BufferedReader br = null;
+ final StringBuilder sb = new StringBuilder();
+ String line;
+ try {
+ br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+ while ((line = br.readLine()) != null) {
+ sb.append(line);
+ }
+ } catch (final IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (br != null) {
+ try {
+ br.close();
+ } catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+ connection.close();
+ }
+
+ Assert.assertTrue("should contain", sb.toString().contains("secure pagealtBasic dGVzdDpwd2Q="));
+ }
+ }
+
+ @Test
public void complexURIAuthorization() throws IOException, URISyntaxException {
final String baseHttp = "http://localhost:" + server.getAddress().getPort() + "/e?authorization=";
final String uri = "failover:sticky+random:" + baseHttp + "Basic%20ABCD&" + baseHttp + "Basic%20EFG";
@@ -157,6 +193,6 @@ public class HttpConnectionTest {
connection.close();
}
final String out = sb.toString();
- Assert.assertTrue(out, out.contains("secure pageBasic ABCD"));
+ Assert.assertTrue(out, out.contains("secure pagehttp://localhost:" + server.getAddress().getPort() + "/eBasic ABCD"));
}
}