This commit is contained in:
root
2025-09-14 17:26:53 +05:00
parent 314b0be03c
commit 88ff4db26f
@@ -16,9 +16,15 @@ public class CorsHeaderFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> 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
}
}