Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Erdfelt2015-10-19 18:59:44 +0000
committerJoakim Erdfelt2015-10-19 18:59:44 +0000
commitfae4f5d43fe9d6f884888f0f6676a6bc5916fde2 (patch)
tree7f3a592b63c6dd6eb1d4b84566fdfbb7c3c03ec7 /jetty-server/src
parentc068b95b2664a93a57e596c92720e4af963a2f16 (diff)
parent8eda037de0ed3f98eec7dad38dd17eb1e8046c17 (diff)
downloadorg.eclipse.jetty.project-fae4f5d43fe9d6f884888f0f6676a6bc5916fde2.tar.gz
org.eclipse.jetty.project-fae4f5d43fe9d6f884888f0f6676a6bc5916fde2.tar.xz
org.eclipse.jetty.project-fae4f5d43fe9d6f884888f0f6676a6bc5916fde2.zip
Merge branch 'jetty-9.3.x'
Diffstat (limited to 'jetty-server/src')
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/handler/DebugHandler.java10
-rw-r--r--jetty-server/src/test/java/org/eclipse/jetty/server/handler/DebugHandlerTest.java96
2 files changed, 100 insertions, 6 deletions
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DebugHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DebugHandler.java
index 6e0061d0d3..52d07c8820 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DebugHandler.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DebugHandler.java
@@ -27,6 +27,7 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.eclipse.jetty.http.HttpURI;
import org.eclipse.jetty.io.Connection;
import org.eclipse.jetty.server.AbstractConnector;
import org.eclipse.jetty.server.Connector;
@@ -66,8 +67,13 @@ public class DebugHandler extends HandlerWrapper implements Connection.Listener
boolean suspend=false;
boolean retry=false;
String name=(String)request.getAttribute("org.eclipse.jetty.thread.name");
- if (name==null) {
- name=old_name+":"+baseRequest.getScheme()+":"+baseRequest.getHttpURI();
+ if (name == null)
+ {
+ HttpURI baseUri = baseRequest.getHttpURI();
+ if (baseUri.getScheme() == null)
+ name = old_name + ":" + baseRequest.getScheme() + ":" + baseUri.toString();
+ else
+ name = old_name + ":" + baseUri.toString();
}
else
retry=true;
diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DebugHandlerTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DebugHandlerTest.java
index 1616315766..d0bbb81624 100644
--- a/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DebugHandlerTest.java
+++ b/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DebugHandlerTest.java
@@ -22,27 +22,55 @@ import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import java.io.ByteArrayOutputStream;
+import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
import java.net.URI;
import java.nio.charset.StandardCharsets;
+import java.security.KeyStore;
+import java.util.concurrent.Executor;
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManagerFactory;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.http.HttpStatus;
+import org.eclipse.jetty.io.ByteBufferPool;
+import org.eclipse.jetty.io.LeakTrackingByteBufferPool;
+import org.eclipse.jetty.io.MappedByteBufferPool;
+import org.eclipse.jetty.server.AbstractConnectionFactory;
+import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
+import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
import org.eclipse.jetty.toolchain.test.SimpleRequest;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
+import org.eclipse.jetty.util.thread.Scheduler;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class DebugHandlerTest
{
+ public final static HostnameVerifier __hostnameverifier = new HostnameVerifier()
+ {
+ public boolean verify(String hostname, SSLSession session)
+ {
+ return true;
+ }
+ };
+
+ private SSLContext sslContext;
private Server server;
private URI serverURI;
+ private URI secureServerURI;
+
@SuppressWarnings("deprecation")
private DebugHandler debugHandler;
private ByteArrayOutputStream capturedLog;
@@ -52,9 +80,25 @@ public class DebugHandlerTest
public void startServer() throws Exception
{
server = new Server();
- ServerConnector connector = new ServerConnector(server);
- connector.setPort(0);
- server.addConnector(connector);
+
+ ServerConnector httpConnector = new ServerConnector(server);
+ httpConnector.setPort(0);
+ server.addConnector(httpConnector);
+
+ File keystorePath = MavenTestingUtils.getTestResourceFile("keystore");
+ SslContextFactory sslContextFactory = new SslContextFactory();
+ sslContextFactory.setKeyStorePath(keystorePath.getAbsolutePath());
+ sslContextFactory.setKeyStorePassword("storepwd");
+ sslContextFactory.setKeyManagerPassword("keypwd");
+ sslContextFactory.setTrustStorePath(keystorePath.getAbsolutePath());
+ sslContextFactory.setTrustStorePassword("storepwd");
+ ByteBufferPool pool = new LeakTrackingByteBufferPool(new MappedByteBufferPool.Tagged());
+ ServerConnector sslConnector = new ServerConnector(server,
+ (Executor)null,
+ (Scheduler)null, pool, 1, 1,
+ AbstractConnectionFactory.getFactories(sslContextFactory,new HttpConnectionFactory()));
+
+ server.addConnector(sslConnector);
debugHandler = new DebugHandler();
capturedLog = new ByteArrayOutputStream();
@@ -71,7 +115,34 @@ public class DebugHandlerTest
server.setHandler(debugHandler);
server.start();
- serverURI = URI.create(String.format("http://%s:%d/", connector.getHost()==null?"localhost":connector.getHost(), connector.getLocalPort()));
+ String host = httpConnector.getHost();
+ if(host == null) host = "localhost";
+
+ serverURI = URI.create(String.format("http://%s:%d/", host, httpConnector.getLocalPort()));
+ secureServerURI = URI.create(String.format("https://%s:%d/", host, sslConnector.getLocalPort()));
+
+ KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
+ try (InputStream stream = sslContextFactory.getKeyStoreResource().getInputStream())
+ {
+ keystore.load(stream, "storepwd".toCharArray());
+ }
+ TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+ trustManagerFactory.init(keystore);
+ sslContext = SSLContext.getInstance("TLS");
+ sslContext.init(null, trustManagerFactory.getTrustManagers(), null);
+
+ try
+ {
+ HttpsURLConnection.setDefaultHostnameVerifier(__hostnameverifier);
+ SSLContext sc = SSLContext.getInstance("TLS");
+ sc.init(null, SslContextFactory.TRUST_ALL_CERTS, new java.security.SecureRandom());
+ HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+ }
+ catch(Exception e)
+ {
+ e.printStackTrace();
+ throw new RuntimeException(e);
+ }
}
@After
@@ -89,5 +160,22 @@ public class DebugHandlerTest
String log = capturedLog.toString(StandardCharsets.UTF_8.name());
String expectedThreadName = String.format("http://%s:%s/foo/bar?a=b",serverURI.getHost(),serverURI.getPort());
assertThat("ThreadName", log, containsString(expectedThreadName));
+ // Look for bad/mangled/duplicated schemes
+ assertThat("ThreadName", log, not(containsString("http:"+expectedThreadName)));
+ assertThat("ThreadName", log, not(containsString("https:"+expectedThreadName)));
+ }
+
+ @Test
+ public void testSecureThreadName() throws IOException
+ {
+ SimpleRequest req = new SimpleRequest(secureServerURI);
+ req.getString("/foo/bar?a=b");
+
+ String log = capturedLog.toString(StandardCharsets.UTF_8.name());
+ String expectedThreadName = String.format("https://%s:%s/foo/bar?a=b",secureServerURI.getHost(),secureServerURI.getPort());
+ assertThat("ThreadName", log, containsString(expectedThreadName));
+ // Look for bad/mangled/duplicated schemes
+ assertThat("ThreadName", log, not(containsString("http:"+expectedThreadName)));
+ assertThat("ThreadName", log, not(containsString("https:"+expectedThreadName)));
}
}

Back to the top