当前位置: 首页 > news >正文

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;
        });
    }

参考:
https://github.com/spring-clo...

相关文章:

  • 有赞电商云应用框架设计
  • JS专题之继承
  • 阿里云服务器怎么升级配置?升级有哪些限制?
  • UniDAC使用教程(五):数据加密
  • React-生命周期杂记
  • 关于VirtualDom的知识点
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • [CF703D]Mishka and Interesting sum/[BZOJ5476]位运算
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 生成、打包、部署和管理应用程序及类型(3):将模块合并成程序集
  • windows下使用nginx调试简介
  • Ajax 知识
  • 什么软件可以提取视频中的音频制作成手机铃声
  • TypeScript(ES6) 的一些使用的小技巧
  • git远程分支回退
  • iOS 系统授权开发
  • Koa2 之文件上传下载
  • magento2项目上线注意事项
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 服务器从安装到部署全过程(二)
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 精彩代码 vue.js
  • 算法---两个栈实现一个队列
  • 自定义函数
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #{}和${}的区别?
  • (C语言)二分查找 超详细
  • (动态规划)5. 最长回文子串 java解决
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET Standard 的管理策略
  • .net 简单实现MD5
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .net6使用Sejil可视化日志
  • .net和jar包windows服务部署
  • .NET基础篇——反射的奥妙
  • .NET中的十进制浮点类型,徐汇区网站设计
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @Autowired和@Resource的区别
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • @WebServiceClient注解,wsdlLocation 可配置
  • [ C++ ] STL_list 使用及其模拟实现
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [C#]手把手教你打造Socket的TCP通讯连接(一)
  • [CLR via C#]11. 事件
  • [DevOps云实践] 彻底删除AWS云资源
  • [flask]http请求//获取请求体数据
  • [Git 1]基本操作与协同开发
  • [hdu 2826] The troubles of lmy [简单计算几何 - 相似]