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 20aaa8c..9c9cfdf 100644 --- a/src/main/java/konturai/kz/api_gateway/filter/CorsHeaderFilter.java +++ b/src/main/java/konturai/kz/api_gateway/filter/CorsHeaderFilter.java @@ -22,61 +22,36 @@ public class CorsHeaderFilter implements GlobalFilter, Ordered { // Log for debugging System.out.println("CORS Filter - Path: " + path + ", Method: " + method); + // Always set CORS headers first + ServerHttpResponse response = exchange.getResponse(); + HttpHeaders headers = response.getHeaders(); + + 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 { + headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "https://konturai.kz"); + } + + headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET, POST, PUT, DELETE, OPTIONS"); + headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "*"); + headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); + headers.set(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "3600"); + // Handle preflight requests immediately if (method.equals("OPTIONS")) { System.out.println("Handling OPTIONS preflight request for: " + path); - ServerHttpResponse response = exchange.getResponse(); - HttpHeaders headers = response.getHeaders(); - - // 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 { - headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "https://konturai.kz"); - } - - headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET, POST, PUT, DELETE, OPTIONS"); - 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 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 downstream service responds - 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); - - // Only override CORS headers if downstream service didn't set them - if (!hasCorsOrigin) { - System.out.println("Adding CORS headers for: " + path); - String origin = request.getHeaders().getFirst(HttpHeaders.ORIGIN); - if (origin != null && isAllowedOrigin(origin)) { - headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, origin); - } else { - headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "https://konturai.kz"); - } - - headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET, POST, PUT, DELETE, OPTIONS"); - 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); - } else { - System.out.println("Downstream service already has CORS headers for: " + path); - } - })); + // For non-preflight requests, continue to downstream service + System.out.println("Forwarding request to downstream service: " + path); + return chain.filter(exchange); } private boolean isAllowedOrigin(String origin) { @@ -89,6 +64,6 @@ public class CorsHeaderFilter implements GlobalFilter, Ordered { @Override public int getOrder() { - return 1000; // Low priority to run after downstream services + return -1; // High priority to run before other filters } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 1ac3996..511be45 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -24,24 +24,6 @@ spring: order: 100 # <-- Низкий приоритет (сработает последним) # CORS обрабатывается через CorsHeaderFilter - globalcors: - cors-configurations: - '[/**]': - allowed-origins: - - 'https://konturai.kz' - - 'http://localhost:*' - - 'http://127.0.0.1:*' - - 'https://localhost:*' - - 'https://127.0.0.1:*' - allowed-methods: - - GET - - POST - - PUT - - DELETE - - OPTIONS - allowed-headers: '*' - allow-credentials: true - max-age: 3600 # Логирование для отладки маршрутизации logging: