【发布时间】:2022-01-09 01:32:41
【问题描述】:
我有一个基于 Typescript 的 React 应用程序,它托管在我的 PC 上。 我使用 Spring 网关将请求转发到另一个微服务。 GET 请求工作正常,但对于 POST 请求,我得到:
CORS 策略已阻止从源“http://localhost:3000”访问“http://1.1.1.1:8080/api/support/tickets/create”处的 XMLHttpRequest:对预检请求的响应没有“ t 通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。
我遇到了这个 Spring Cloud Gateway 问题:https://github.com/spring-cloud/spring-cloud-gateway/issues/229
Spring 云配置:
@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();
}
反应代码:
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;
}
}
但它不起作用。你知道我该如何解决这个问题吗?
【问题讨论】:
-
您是否为 CORS 配置了网关?从 Github 链接看来,有一些解决方法可以设置允许的方法。
-
是的,我试过了,但没有解决问题。
-
postman 或类似内容在发布请求中显示哪些响应标头?
-
看这张图:ibb.co/gmQBYvW
-
我...可能是我失明了,但我没有看到任何
Access-Control-Allow-Origin标头...
标签: javascript reactjs spring-boot axios spring-cloud-gateway