我有一个基于Typescript的React应用程序,托管在我的个人电脑上。我使用Spring gateway将请求转发到另一个微服务。GET请求运行良好,但对于POST请求,我会收到以下错误信息:
跨域资源共享(CORS)策略阻止了从' http://localhost:3000 '到'http://1.1.1.1:8080/api/support/tickets/create'的XMLHttpRequest访问,被请求的资源未包含响应头中的Access-Control-Allow-Origin,拒绝访问。
我遇到了这个Spring Cloud Gateway问题:https://github.com/spring-cloud/spring-cloud-gateway/issues/229
Spring Cloud配置如下:
@Bean
public RouteLocator routes(RouteLocatorBuilder builder, LoggingGatewayFilterFactory loggingFactory) {
return builder.routes()
.route("route_id",
route -> route
.path("/api/support/tickets/**")
.filters(f -> f.rewritePath("/api/support/tickets/(?<RID>.*)", "/support/tickets/${RID}"))
.uri("lb://merchant-hub-admin-service")
)
.build();
}
React 代码:
export async function getTicket(id: string) {
return await axios.get(`${baseUrl}/support/tickets/ticket/${id}`);
}
export async function postTicket(
data: TicketFullDTO
): Promise<AxiosResponse<TicketFullDTO>> {
return await axios.post<TicketFullDTO>(
`${baseUrl}/support/tickets/create`, data);
}
这是由于购买 Spring Cloud Gateway 引起的:https://github.com/spring-cloud/spring-cloud-gateway/issues/2472 我尝试实现这个解决方案:
@Bean
public RoutePredicateHandlerMapping tusRoutePredicateHandlerMapping(FilteringWebHandler webHandler,
RouteLocator routeLocator,
GlobalCorsProperties globalCorsProperties,
Environment environment) {
RoutePredicateHandlerMapping routePredicateHandlerMapping = new RoutePredicateHandlerMapping(webHandler,
routeLocator, globalCorsProperties, environment);
routePredicateHandlerMapping.setCorsProcessor(new CrackCorsProcessor());
return routePredicateHandlerMapping;
}
import org.springframework.lang.Nullable;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.DefaultCorsProcessor;
import org.springframework.web.server.ServerWebExchange;
public class CrackCorsProcessor extends DefaultCorsProcessor {
@Override
public boolean process(@Nullable CorsConfiguration config, ServerWebExchange exchange) {
return false;
}
}
但是它没有起作用。你知道我怎么可以解决这个问题吗?