1
2
3
4
5
6 package org.tailormap.api.geotools.wfs;
7
8 import static org.springframework.http.HttpHeaders.REFERER;
9 import static org.tailormap.api.util.HttpProxyUtil.addForwardedForRequestHeaders;
10 import static org.tailormap.api.util.HttpProxyUtil.configureProxyRequestBuilderForUri;
11 import static org.tailormap.api.util.HttpProxyUtil.passthroughRequestHeaders;
12 import static org.tailormap.api.util.HttpProxyUtil.setHttpBasicAuthenticationHeader;
13
14 import jakarta.servlet.http.HttpServletRequest;
15 import java.io.InputStream;
16 import java.net.URI;
17 import java.net.http.HttpClient;
18 import java.net.http.HttpRequest;
19 import java.net.http.HttpResponse;
20 import java.util.Set;
21
22 public class WFSProxy {
23 private final HttpClient httpClient;
24
25 public WFSProxy() {
26 final HttpClient.Builder builder = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.NORMAL);
27 this.httpClient = builder.build();
28 }
29
30 public HttpResponse<InputStream> proxyWfsRequest(
31 URI wfsRequest, String username, String password, HttpServletRequest request) throws Exception {
32
33 HttpRequest.Builder requestBuilder = HttpRequest.newBuilder();
34 configureProxyRequestBuilderForUri(requestBuilder, wfsRequest, request);
35 addForwardedForRequestHeaders(requestBuilder, request);
36
37
38 passthroughRequestHeaders(requestBuilder, request, Set.of(REFERER, "User-Agent"));
39 setHttpBasicAuthenticationHeader(requestBuilder, username, password);
40
41 return httpClient.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofInputStream());
42 }
43 }