mirror of
https://github.com/jetty/jetty.project.git
synced 2025-03-01 03:19:13 +00:00
Merge "370842: X-Forwarded-Host header is now set by request.getHeader(Host) which doesn't ommit the port information"
This commit is contained in:
commit
60a77e425a
@ -597,12 +597,14 @@ public class ProxyServlet implements Servlet
|
|||||||
{
|
{
|
||||||
exchange.addRequestHeader("X-Forwarded-For",request.getRemoteAddr());
|
exchange.addRequestHeader("X-Forwarded-For",request.getRemoteAddr());
|
||||||
exchange.addRequestHeader("X-Forwarded-Proto",request.getScheme());
|
exchange.addRequestHeader("X-Forwarded-Proto",request.getScheme());
|
||||||
exchange.addRequestHeader("X-Forwarded-Host",request.getServerName());
|
exchange.addRequestHeader("X-Forwarded-Host",request.getHeader("Host"));
|
||||||
exchange.addRequestHeader("X-Forwarded-Server",request.getLocalName());
|
exchange.addRequestHeader("X-Forwarded-Server",request.getLocalName());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasContent)
|
if (hasContent)
|
||||||
|
{
|
||||||
exchange.setRequestContentSource(in);
|
exchange.setRequestContentSource(in);
|
||||||
|
}
|
||||||
|
|
||||||
customizeExchange(exchange, request);
|
customizeExchange(exchange, request);
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ import java.io.File;
|
|||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
@ -12,7 +13,6 @@ import javax.servlet.ServletOutputStream;
|
|||||||
import javax.servlet.http.HttpServlet;
|
import javax.servlet.http.HttpServlet;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import junit.framework.Assert;
|
import junit.framework.Assert;
|
||||||
import org.eclipse.jetty.client.ContentExchange;
|
import org.eclipse.jetty.client.ContentExchange;
|
||||||
import org.eclipse.jetty.client.HttpClient;
|
import org.eclipse.jetty.client.HttpClient;
|
||||||
@ -30,21 +30,24 @@ import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
|
|||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
import static org.hamcrest.Matchers.*;
|
||||||
|
|
||||||
public class ProxyServletTest
|
public class ProxyServletTest
|
||||||
{
|
{
|
||||||
private Server server;
|
private Server _server;
|
||||||
private Connector connector;
|
private Connector _connector;
|
||||||
private HttpClient client;
|
private HttpClient _client;
|
||||||
|
|
||||||
public void init(HttpServlet servlet) throws Exception
|
public void init(HttpServlet servlet) throws Exception
|
||||||
{
|
{
|
||||||
server = new Server();
|
_server = new Server();
|
||||||
|
|
||||||
connector = new SelectChannelConnector();
|
_connector = new SelectChannelConnector();
|
||||||
server.addConnector(connector);
|
_server.addConnector(_connector);
|
||||||
|
|
||||||
HandlerCollection handlers = new HandlerCollection();
|
HandlerCollection handlers = new HandlerCollection();
|
||||||
server.setHandler(handlers);
|
_server.setHandler(handlers);
|
||||||
|
|
||||||
ServletContextHandler proxyCtx = new ServletContextHandler(handlers, "/proxy", ServletContextHandler.NO_SESSIONS);
|
ServletContextHandler proxyCtx = new ServletContextHandler(handlers, "/proxy", ServletContextHandler.NO_SESSIONS);
|
||||||
ServletHolder proxyServletHolder = new ServletHolder(new ProxyServlet()
|
ServletHolder proxyServletHolder = new ServletHolder(new ProxyServlet()
|
||||||
@ -66,25 +69,49 @@ public class ProxyServletTest
|
|||||||
handlers.addHandler(proxyCtx);
|
handlers.addHandler(proxyCtx);
|
||||||
handlers.addHandler(appCtx);
|
handlers.addHandler(appCtx);
|
||||||
|
|
||||||
server.start();
|
_server.start();
|
||||||
|
|
||||||
client = new HttpClient();
|
_client = new HttpClient();
|
||||||
client.start();
|
_client.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
public void destroy() throws Exception
|
public void destroy() throws Exception
|
||||||
{
|
{
|
||||||
if (client != null)
|
if (_client != null)
|
||||||
client.stop();
|
_client.stop();
|
||||||
|
|
||||||
if (server != null)
|
if (_server != null)
|
||||||
{
|
{
|
||||||
server.stop();
|
_server.stop();
|
||||||
server.join();
|
_server.join();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testXForwardedHostHeader() throws Exception
|
||||||
|
{
|
||||||
|
init(new HttpServlet()
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
|
||||||
|
{
|
||||||
|
PrintWriter writer = resp.getWriter();
|
||||||
|
writer.write(req.getHeader("X-Forwarded-Host"));
|
||||||
|
writer.flush();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
String url = "http://localhost:" + _connector.getLocalPort() + "/proxy/test";
|
||||||
|
ContentExchange exchange = new ContentExchange();
|
||||||
|
exchange.setURL(url);
|
||||||
|
_client.send(exchange);
|
||||||
|
exchange.waitForDone();
|
||||||
|
assertThat("Response expected to contain content of X-Forwarded-Host Header from the request",exchange.getResponseContent(),equalTo("localhost:"
|
||||||
|
+ _connector.getLocalPort()));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBigDownloadWithSlowReader() throws Exception
|
public void testBigDownloadWithSlowReader() throws Exception
|
||||||
@ -101,6 +128,8 @@ public class ProxyServletTest
|
|||||||
|
|
||||||
init(new HttpServlet()
|
init(new HttpServlet()
|
||||||
{
|
{
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
|
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
|
||||||
{
|
{
|
||||||
@ -114,7 +143,7 @@ public class ProxyServletTest
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
String url = "http://localhost:" + connector.getLocalPort() + "/proxy" + "/test";
|
String url = "http://localhost:" + _connector.getLocalPort() + "/proxy/test";
|
||||||
ContentExchange exchange = new ContentExchange(true)
|
ContentExchange exchange = new ContentExchange(true)
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@ -134,7 +163,7 @@ public class ProxyServletTest
|
|||||||
};
|
};
|
||||||
exchange.setURL(url);
|
exchange.setURL(url);
|
||||||
long start = System.nanoTime();
|
long start = System.nanoTime();
|
||||||
client.send(exchange);
|
_client.send(exchange);
|
||||||
Assert.assertEquals(HttpExchange.STATUS_COMPLETED, exchange.waitForDone());
|
Assert.assertEquals(HttpExchange.STATUS_COMPLETED, exchange.waitForDone());
|
||||||
long elapsed = System.nanoTime() - start;
|
long elapsed = System.nanoTime() - start;
|
||||||
Assert.assertEquals(HttpStatus.OK_200, exchange.getResponseStatus());
|
Assert.assertEquals(HttpStatus.OK_200, exchange.getResponseStatus());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user