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 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 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(); } } }