|
14 | 14 | import org.junit.runner.RunWith;
|
15 | 15 | import org.xnio.OptionMap;
|
16 | 16 | import org.xnio.Options;
|
| 17 | +import io.undertow.Handlers; |
17 | 18 | import io.undertow.Undertow;
|
18 | 19 | import io.undertow.protocols.ssl.UndertowXnioSsl;
|
19 | 20 | import io.undertow.server.HttpHandler;
|
@@ -70,6 +71,18 @@ public static void teardown() throws Exception {
|
70 | 71 |
|
71 | 72 | }
|
72 | 73 |
|
| 74 | + private static void setProxyHandlerWithPeerAddressHandler(boolean rewriteHostHeader, boolean reuseXForwarded) throws Exception { |
| 75 | + |
| 76 | + HttpHandler rootHandler = ProxyHandler.builder().setProxyClient((new LoadBalancingProxyClient() |
| 77 | + .setConnectionsPerThread(4) |
| 78 | + .addHost(new URI("https", null, DefaultServer.getHostAddress("default"), handlerPort, null, null, null), "s1", ssl))) |
| 79 | + .setMaxRequestTime(10000) |
| 80 | + .setRewriteHostHeader(rewriteHostHeader) |
| 81 | + .setReuseXForwarded(reuseXForwarded).build(); |
| 82 | + |
| 83 | + DefaultServer.setRootHandler(Handlers.proxyPeerAddress(rootHandler)); |
| 84 | + } |
| 85 | + |
73 | 86 | private static void setProxyHandler(boolean rewriteHostHeader, boolean reuseXForwarded) throws Exception {
|
74 | 87 |
|
75 | 88 | DefaultServer.setRootHandler(ProxyHandler.builder().setProxyClient((new LoadBalancingProxyClient()
|
@@ -166,11 +179,37 @@ public void testRewriteHostHeader() throws Exception {
|
166 | 179 | }
|
167 | 180 | }
|
168 | 181 |
|
| 182 | + @Test |
| 183 | + public void testWithProxyPeerAddressHandler() throws Exception { |
| 184 | + setProxyHandlerWithPeerAddressHandler(false, false); |
| 185 | + TestHttpClient client = new TestHttpClient(); |
| 186 | + |
| 187 | + try { |
| 188 | + HttpGet get = new HttpGet(DefaultServer.getDefaultServerURL() + "/x-forwarded"); |
| 189 | + get.addHeader(Headers.X_FORWARDED_FOR.toString(), "localhost"); |
| 190 | + HttpResponse result = client.execute(get); |
| 191 | + Assert.assertEquals(StatusCodes.OK, result.getStatusLine().getStatusCode()); |
| 192 | + |
| 193 | + Assert.assertEquals(port, Integer.parseInt(result.getFirstHeader(Headers.X_FORWARDED_PORT.toString()).getValue())); |
| 194 | + Assert.assertEquals("http", result.getFirstHeader(Headers.X_FORWARDED_PROTO.toString()).getValue()); |
| 195 | + Assert.assertEquals(DefaultServer.getHostAddress(), result.getFirstHeader(Headers.X_FORWARDED_HOST.toString()).getValue()); |
| 196 | + Assert.assertEquals("localhost", result.getFirstHeader(Headers.X_FORWARDED_FOR.toString()).getValue()); |
| 197 | + |
| 198 | + } finally { |
| 199 | + client.getConnectionManager().shutdown(); |
| 200 | + } |
| 201 | + } |
| 202 | + |
169 | 203 | protected static final class XForwardedHandler implements HttpHandler {
|
170 | 204 |
|
171 | 205 | @Override
|
172 | 206 | public void handleRequest(final HttpServerExchange exchange) throws Exception {
|
173 | 207 | // Copy the X-Fowarded* headers into the response
|
| 208 | + try { |
| 209 | + //Thread.sleep(5000); |
| 210 | + } catch (Exception e){ |
| 211 | + // no op |
| 212 | + } |
174 | 213 | if (exchange.getRequestHeaders().contains(Headers.X_FORWARDED_FOR))
|
175 | 214 | exchange.getResponseHeaders().put(Headers.X_FORWARDED_FOR, exchange.getRequestHeaders().getFirst(Headers.X_FORWARDED_FOR));
|
176 | 215 |
|
|
0 commit comments