spring cloud gateway 源码解析(4)跨域问题处理

本文深入探讨了在前后端分离的项目中,如何利用Spring Gateway有效处理跨域问题。通过解析AbstractHandlerMapping类中的getHandler方法,展示了跨域配置的合并与处理流程,以及DefaultCorsProcessor如何将跨域配置应用到请求头中。

现在项目大多开始前后端分离,前端开发的时候可以用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...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值