This commit is contained in:
root
2025-09-14 16:35:52 +05:00
parent c0a7f45fe8
commit c8dc5f5ee5
2 changed files with 34 additions and 1 deletions
@@ -16,14 +16,22 @@ public class CorsHeaderFilter implements GlobalFilter, Ordered {
@Override @Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest(); 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 // 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(); ServerHttpResponse response = exchange.getResponse();
HttpHeaders headers = response.getHeaders(); HttpHeaders headers = response.getHeaders();
// Set CORS headers for preflight // Set CORS headers for preflight
String origin = request.getHeaders().getFirst(HttpHeaders.ORIGIN); String origin = request.getHeaders().getFirst(HttpHeaders.ORIGIN);
System.out.println("Origin: " + origin);
if (origin != null && isAllowedOrigin(origin)) { if (origin != null && isAllowedOrigin(origin)) {
headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, origin); headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, origin);
} else { } else {
@@ -35,6 +43,8 @@ public class CorsHeaderFilter implements GlobalFilter, Ordered {
headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
headers.set(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "3600"); 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); response.setStatusCode(org.springframework.http.HttpStatus.OK);
return Mono.empty(); return Mono.empty();
} }
@@ -46,9 +56,11 @@ public class CorsHeaderFilter implements GlobalFilter, Ordered {
// Check if downstream service already set CORS headers // Check if downstream service already set CORS headers
boolean hasCorsOrigin = headers.containsKey(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN); 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 // Only override CORS headers if downstream service didn't set them
if (!hasCorsOrigin) { if (!hasCorsOrigin) {
System.out.println("Adding CORS headers for: " + path);
String origin = request.getHeaders().getFirst(HttpHeaders.ORIGIN); String origin = request.getHeaders().getFirst(HttpHeaders.ORIGIN);
if (origin != null && isAllowedOrigin(origin)) { if (origin != null && isAllowedOrigin(origin)) {
headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, origin); headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, origin);
@@ -60,6 +72,9 @@ public class CorsHeaderFilter implements GlobalFilter, Ordered {
headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "*"); headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "*");
headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); headers.set(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
headers.set(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "3600"); 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);
} }
})); }));
} }
+18
View File
@@ -24,6 +24,24 @@ spring:
order: 100 # <-- Низкий приоритет (сработает последним) order: 100 # <-- Низкий приоритет (сработает последним)
# CORS обрабатывается через CorsHeaderFilter # 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: logging: