don't strip
This commit is contained in:
@@ -0,0 +1,71 @@
|
|||||||
|
package konturai.kz.api_gateway.filter;
|
||||||
|
|
||||||
|
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
|
||||||
|
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||||
|
import org.springframework.core.Ordered;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class CorsHeaderFilter implements GlobalFilter, Ordered {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
||||||
|
ServerHttpRequest request = exchange.getRequest();
|
||||||
|
ServerHttpResponse response = exchange.getResponse();
|
||||||
|
|
||||||
|
// Add CORS headers to response
|
||||||
|
HttpHeaders headers = response.getHeaders();
|
||||||
|
|
||||||
|
// Remove any existing CORS headers to prevent duplication
|
||||||
|
headers.remove(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN);
|
||||||
|
headers.remove(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS);
|
||||||
|
headers.remove(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS);
|
||||||
|
headers.remove(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS);
|
||||||
|
headers.remove(HttpHeaders.ACCESS_CONTROL_MAX_AGE);
|
||||||
|
|
||||||
|
// Get the origin from the request
|
||||||
|
String origin = request.getHeaders().getFirst(HttpHeaders.ORIGIN);
|
||||||
|
|
||||||
|
// Set CORS headers based on the origin
|
||||||
|
if (origin != null && isAllowedOrigin(origin)) {
|
||||||
|
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, origin);
|
||||||
|
} else {
|
||||||
|
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "https://konturai.kz");
|
||||||
|
}
|
||||||
|
|
||||||
|
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET, POST, PUT, DELETE, OPTIONS");
|
||||||
|
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "*");
|
||||||
|
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
|
||||||
|
headers.add(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "3600");
|
||||||
|
|
||||||
|
// Handle preflight requests
|
||||||
|
if (request.getMethod().name().equals("OPTIONS")) {
|
||||||
|
response.setStatusCode(org.springframework.http.HttpStatus.OK);
|
||||||
|
return Mono.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
return chain.filter(exchange);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isAllowedOrigin(String origin) {
|
||||||
|
return origin != null && (
|
||||||
|
origin.equals("https://konturai.kz") ||
|
||||||
|
origin.startsWith("http://localhost:") ||
|
||||||
|
origin.startsWith("http://127.0.0.1:") ||
|
||||||
|
origin.startsWith("https://localhost:") ||
|
||||||
|
origin.startsWith("https://127.0.0.1:")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getOrder() {
|
||||||
|
return -1; // High priority to run before other filters
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,7 +13,7 @@ spring:
|
|||||||
predicates:
|
predicates:
|
||||||
- Path=/api/parser/**
|
- Path=/api/parser/**
|
||||||
filters:
|
filters:
|
||||||
- StripPrefix=2 # Убираем /api/parser
|
- StripPrefix=0 # Сохраняем полный путь /api/parser
|
||||||
order: 1 # <-- Высокий приоритет
|
order: 1 # <-- Высокий приоритет
|
||||||
|
|
||||||
# Маршрут по умолчанию для Core сервиса (НИЗКИЙ ПРИОРИТЕТ)
|
# Маршрут по умолчанию для Core сервиса (НИЗКИЙ ПРИОРИТЕТ)
|
||||||
@@ -23,20 +23,7 @@ spring:
|
|||||||
- Path=/** # <-- Матчится со всеми путями
|
- Path=/** # <-- Матчится со всеми путями
|
||||||
order: 100 # <-- Низкий приоритет (сработает последним)
|
order: 100 # <-- Низкий приоритет (сработает последним)
|
||||||
|
|
||||||
# CORS конфигурация для поддержки кросс-доменных запросов
|
# CORS обрабатывается через CorsHeaderFilter
|
||||||
globalcors:
|
|
||||||
corsConfigurations:
|
|
||||||
'[/**]':
|
|
||||||
allowedOriginPatterns:
|
|
||||||
- '*'
|
|
||||||
allowedMethods:
|
|
||||||
- GET
|
|
||||||
- POST
|
|
||||||
- PUT
|
|
||||||
- DELETE
|
|
||||||
- OPTIONS
|
|
||||||
allowedHeaders: '*'
|
|
||||||
allowCredentials: true
|
|
||||||
|
|
||||||
# Логирование для отладки маршрутизации
|
# Логирование для отладки маршрутизации
|
||||||
logging:
|
logging:
|
||||||
|
|||||||
Reference in New Issue
Block a user