ProxyController.java
2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.sigem.gis.controller;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
@RestController
public class ProxyController {
private final HttpClient httpClient = HttpClient.newHttpClient();
private final String GEOSERVER_INTERNAL_URL = "http://geoserver:8080/geoserver";
@GetMapping({"/gwc/**", "/sigem/**", "/wms/**", "/wfs/**", "/rest/**"})
public ResponseEntity<byte[]> proxyGwc(HttpServletRequest request) {
try {
String path = request.getRequestURI();
String contextPath = request.getContextPath(); // /gis-geoserver
// Extraer la parte despues del context path
String relativePath = path.substring(contextPath.length());
String targetUrl = GEOSERVER_INTERNAL_URL + relativePath;
if (request.getQueryString() != null) {
targetUrl += "?" + request.getQueryString();
}
HttpRequest proxyRequest = HttpRequest.newBuilder()
.uri(URI.create(targetUrl))
.GET()
.build();
HttpResponse<byte[]> response = httpClient.send(proxyRequest, HttpResponse.BodyHandlers.ofByteArray());
// Copiar cabeceras relevantes (Content-Type es el mas importante para PBF)
HttpHeaders headers = new HttpHeaders();
response.headers().firstValue("Content-Type").ifPresent(ct -> headers.setContentType(MediaType.parseMediaType(ct)));
return ResponseEntity.status(response.statusCode())
.headers(headers)
.body(response.body());
} catch (Exception e) {
return ResponseEntity.status(500).build();
}
}
}