现在项目大多开始前后端分离,前端开发的时候可以用webpack的proxytable来配置
线上打包的话可以直接放到后台项目的静态资源目录了,这样就不会有跨域问题,或者放到nginx里
在配置好资源目录就行,这些方案网上都有就不展开了,现在说说gateway怎么处理跨域:
我们看AbstractHandlerMapping类里的getHandler方法
@Override
public Mono<Object> getHandler(ServerWebExchange exchange) {
//根据url获取不同的handler后(不清楚的可以先看前文),会进行跨域处理
return getHandlerInternal(exchange).map(handler -> {
if (CorsUtils.isCorsRequest(exchange.getRequest())) {
CorsConfiguration configA = this.globalCorsConfigSource.getCorsConfiguration(exchange);
CorsConfiguration configB = getCorsConfiguration(handler, exchange);
//获取跨域配置并合并(如果配置文件里配置了话)
CorsConfiguration config = (configA != null ? configA.combine(configB) : configB);
//这里,看DefaultCorsProcessor的process方法及handleInternal方法,把我们的跨域配置添加到headers里,本质跟我们自己定义个过滤器添加header一样
if (!getCorsProcessor().process(config, exchange) ||
CorsUtils.isPreFlightRequest(exchange.getRequest())) {
return REQUEST_HANDLED_HANDLER;
}
}
return handler;
});
}
参考:
https://github.com/spring-clo...