mojianc 2019-06-30
现在项目大多开始前后端分离,前端开发的时候可以用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; }); }