private void performRequest( HttpServletRequest servletRequest, AsyncResponse asyncResponse, Request.Builder requestBuilder, Function<ProxyResponse, Response> responseBuilder) { setupBearerToken(servletRequest, requestBuilder); for (String name : list(servletRequest.getHeaderNames())) { if (isPrestoHeader(name) || name.equalsIgnoreCase(COOKIE)) { for (String value : list(servletRequest.getHeaders(name))) { requestBuilder.addHeader(name, value); } } else if (name.equalsIgnoreCase(USER_AGENT)) { for (String value : list(servletRequest.getHeaders(name))) { requestBuilder.addHeader(name, "[Presto Proxy] " + value); } } } Request request = requestBuilder .setPreserveAuthorizationOnRedirect(true) .build(); ListenableFuture<Response> future = executeHttp(request) .transform(responseBuilder::apply, executor) .catching(ProxyException.class, e -> handleProxyException(request, e), directExecutor()); setupAsyncResponse(asyncResponse, future); }
private void performRequest( HttpServletRequest servletRequest, AsyncResponse asyncResponse, Request.Builder requestBuilder, Function<ProxyResponse, Response> responseBuilder) { setupBearerToken(servletRequest, requestBuilder); for (String name : list(servletRequest.getHeaderNames())) { if (isPrestoHeader(name) || name.equalsIgnoreCase(COOKIE)) { for (String value : list(servletRequest.getHeaders(name))) { requestBuilder.addHeader(name, value); } } else if (name.equalsIgnoreCase(USER_AGENT)) { for (String value : list(servletRequest.getHeaders(name))) { requestBuilder.addHeader(name, "[Presto Proxy] " + value); } } } Request request = requestBuilder .setPreserveAuthorizationOnRedirect(true) .build(); ListenableFuture<Response> future = executeHttp(request) .transform(responseBuilder::apply, executor) .catching(ProxyException.class, e -> handleProxyException(request, e), directExecutor()); setupAsyncResponse(asyncResponse, future); }
@Test public void testRedirectRequestHeaders() throws Exception { String basic = "Basic dGVzdDphYmM="; String bearer = "Bearer testxyz"; Request request = prepareGet() .setUri(URI.create(baseURI.toASCIIString() + "/?redirect=/redirect")) .addHeader("X-Test", "xtest1") .addHeader("X-Test", "xtest2") .setHeader(USER_AGENT, "testagent") .addHeader(AUTHORIZATION, basic) .addHeader(AUTHORIZATION, bearer) .build(); StatusResponse response = executeRequest(request, createStatusResponseHandler()); assertEquals(response.getStatusCode(), 200); assertEquals(servlet.getRequestUri(), URI.create(baseURI.toASCIIString() + "/redirect")); assertThat(servlet.getRequestHeaders("X-Test")).containsExactly("xtest1", "xtest2"); assertThat(servlet.getRequestHeaders(USER_AGENT)).containsExactly("testagent"); assertThat(servlet.getRequestHeaders(AUTHORIZATION)).isEmpty(); request = Request.Builder.fromRequest(request) .setPreserveAuthorizationOnRedirect(true) .build(); response = executeRequest(request, createStatusResponseHandler()); assertEquals(response.getStatusCode(), 200); assertEquals(servlet.getRequestUri(), URI.create(baseURI.toASCIIString() + "/redirect")); assertThat(servlet.getRequestHeaders("X-Test")).containsExactly("xtest1", "xtest2"); assertThat(servlet.getRequestHeaders(USER_AGENT)).containsExactly("testagent"); assertThat(servlet.getRequestHeaders(AUTHORIZATION)).containsExactly(basic, bearer); }
prepareGet().setUri(createUriA()).addHeaders(createHeadersA()).build(), prepareGet().setUri(createUriA()).addHeaders(createHeadersA()).setFollowRedirects(true).build(), prepareGet().setUri(createUriA()).addHeaders(createHeadersA()).setPreserveAuthorizationOnRedirect(false).build()) .addEquivalentGroup( preparePut().setUri(createUriA()).addHeaders(createHeadersA()).setFollowRedirects(false).build()) .addEquivalentGroup( preparePut().setUri(createUriA()).addHeaders(createHeadersA()).setPreserveAuthorizationOnRedirect(true).build()) .addEquivalentGroup( prepareGet().setUri(createUriA()).addHeaders(createHeadersA()).setBodyGenerator(bodyGenerator).build(),
prepareGet().setUri(createUriA()).addHeaders(createHeadersA()).build(), prepareGet().setUri(createUriA()).addHeaders(createHeadersA()).setFollowRedirects(true).build(), prepareGet().setUri(createUriA()).addHeaders(createHeadersA()).setPreserveAuthorizationOnRedirect(false).build()) .addEquivalentGroup( preparePut().setUri(createUriA()).addHeaders(createHeadersA()).setFollowRedirects(false).build()) .addEquivalentGroup( preparePut().setUri(createUriA()).addHeaders(createHeadersA()).setPreserveAuthorizationOnRedirect(true).build()) .addEquivalentGroup( prepareGet().setUri(createUriA()).addHeaders(createHeadersA()).setBodyGenerator(bodyGenerator).build(),
@Test public void testRedirectRequestHeaders() throws Exception { String basic = "Basic dGVzdDphYmM="; String bearer = "Bearer testxyz"; Request request = prepareGet() .setUri(URI.create(baseURI.toASCIIString() + "/?redirect=/redirect")) .addHeader("X-Test", "xtest1") .addHeader("X-Test", "xtest2") .setHeader(USER_AGENT, "testagent") .addHeader(AUTHORIZATION, basic) .addHeader(AUTHORIZATION, bearer) .build(); StatusResponse response = executeRequest(request, createStatusResponseHandler()); assertEquals(response.getStatusCode(), 200); assertEquals(servlet.getRequestUri(), URI.create(baseURI.toASCIIString() + "/redirect")); assertThat(servlet.getRequestHeaders("X-Test")).containsExactly("xtest1", "xtest2"); assertThat(servlet.getRequestHeaders(USER_AGENT)).containsExactly("testagent"); assertThat(servlet.getRequestHeaders(AUTHORIZATION)).isEmpty(); request = Request.Builder.fromRequest(request) .setPreserveAuthorizationOnRedirect(true) .build(); response = executeRequest(request, createStatusResponseHandler()); assertEquals(response.getStatusCode(), 200); assertEquals(servlet.getRequestUri(), URI.create(baseURI.toASCIIString() + "/redirect")); assertThat(servlet.getRequestHeaders("X-Test")).containsExactly("xtest1", "xtest2"); assertThat(servlet.getRequestHeaders(USER_AGENT)).containsExactly("testagent"); assertThat(servlet.getRequestHeaders(AUTHORIZATION)).containsExactly(basic, bearer); }
private static Request createRequest() { return prepareGet() .setUri(URI.create("http://example.com")) .addHeader("newheader", "withvalue") .addHeader("anotherheader", "anothervalue") .setBodyGenerator(NULL_BODY_GENERATOR) .setFollowRedirects(false) .setPreserveAuthorizationOnRedirect(true) .build(); } }
private static Request createRequest() { return prepareGet() .setUri(URI.create("http://example.com")) .addHeader("newheader", "withvalue") .addHeader("anotherheader", "anothervalue") .setBodyGenerator(NULL_BODY_GENERATOR) .setFollowRedirects(false) .setPreserveAuthorizationOnRedirect(true) .build(); } }
public static Builder fromRequest(Request request) { return new Builder() .setUri(request.getUri()) .setMethod(request.getMethod()) .addHeaders(request.getHeaders()) .setBodyGenerator(request.getBodyGenerator()) .setFollowRedirects(request.isFollowRedirects()) .setPreserveAuthorizationOnRedirect(request.isPreserveAuthorizationOnRedirect()); }