From 88ff4db26fc3ff460e0dbb800e3a86b51da8606f Mon Sep 17 00:00:00 2001 From: root Date: Sun, 14 Sep 2025 17:26:53 +0500 Subject: [PATCH] cors --- .../api_gateway/filter/CorsHeaderFilter.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/java/konturai/kz/api_gateway/filter/CorsHeaderFilter.java b/src/main/java/konturai/kz/api_gateway/filter/CorsHeaderFilter.java index 1d49b01..f0113be 100644 --- a/src/main/java/konturai/kz/api_gateway/filter/CorsHeaderFilter.java +++ b/src/main/java/konturai/kz/api_gateway/filter/CorsHeaderFilter.java @@ -16,9 +16,15 @@ public class CorsHeaderFilter implements GlobalFilter, Ordered { @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); + String path = request.getPath().value(); + String method = request.getMethod().name(); + + // Log for debugging + System.out.println("CORS Filter - Path: " + path + ", Method: " + method); // Handle preflight requests immediately - if (request.getMethod().name().equals("OPTIONS")) { + if (method.equals("OPTIONS")) { + System.out.println("Handling OPTIONS preflight request for: " + path); ServerHttpResponse response = exchange.getResponse(); HttpHeaders headers = response.getHeaders(); @@ -31,6 +37,8 @@ public class CorsHeaderFilter implements GlobalFilter, Ordered { // Set CORS headers for preflight String origin = request.getHeaders().getFirst(HttpHeaders.ORIGIN); + System.out.println("Origin: " + origin); + if (origin != null && isAllowedOrigin(origin)) { headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, origin); } else { @@ -42,15 +50,22 @@ public class CorsHeaderFilter implements GlobalFilter, Ordered { headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); headers.set(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "3600"); + System.out + .println("CORS headers set for preflight: " + headers.get(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)); response.setStatusCode(org.springframework.http.HttpStatus.OK); return Mono.empty(); } // For non-preflight requests, process after the downstream service responds + System.out.println("Forwarding request to downstream service: " + path); return chain.filter(exchange).then(Mono.fromRunnable(() -> { ServerHttpResponse response = exchange.getResponse(); HttpHeaders headers = response.getHeaders(); + // Check if downstream service already set CORS headers + boolean hasCorsOrigin = headers.containsKey(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN); + System.out.println("After downstream service - Path: " + path + ", Has CORS: " + hasCorsOrigin); + // Clear any existing CORS headers from downstream service headers.remove(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN); headers.remove(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS); @@ -70,6 +85,8 @@ public class CorsHeaderFilter implements GlobalFilter, Ordered { headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "*"); headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); headers.set(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "3600"); + + System.out.println("CORS headers added for: " + path); })); } @@ -83,6 +100,6 @@ public class CorsHeaderFilter implements GlobalFilter, Ordered { @Override public int getOrder() { - return 1000; // Low priority to run after other filters and downstream services + return -1; // High priority to run before other filters } }