.
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user