spring cloud gateway 源码解析(4)跨域问题处理
现在项目大多开始前后端分离,前端开发的时候可以用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; }); }
相关推荐
bearhoopIT之道 2020-08-16
Kakoola 2020-08-01
凯哥Java 2020-07-04
haidaoxianzi 2020-07-04
delmarks 2020-06-28
aNian 2020-06-16
qingjiuquan 2020-06-07
fraternityjava 2020-06-04
明瞳 2020-06-04
HappyHeng 2020-05-28
88473166 2020-05-14
zkwgpp 2020-05-07
oXiaoChong 2020-05-07
ChainDestiny 2020-05-07
doomvsjing 2020-05-07
xuMelon 2020-05-04
MrLiar 2020-04-27