在前后端分离的系统结构中,前端项目与后端代码部署在不同服务器,当前端页面请求后端代码时,就会出现跨域问题,如:
不多说,直接上干货:
用nginx代理,把前端项目和后端Api通过nginx代理,统一使用同一协议同一域名同一端口(了解nginx的都应该知道怎么处理,这里就不详细开展)
在SpringCloud项目中,可以在Gateway(网关)中统一配置跨域请求,下面我们重点讲一下配置过程
Gateway统一配置跨域请求
准备工作:
1.先搭建好一个超级简单,超级捡漏,只为测试的springcloud应用,里面包括gateway模块+一个业务模块
2.新建一个html页面,里面ajax请求后台Api
配置过程:在gateway模块中新建一个配置类加入到spring容器中,重启gateway模块,如:
/** * @author Wgy * @date 2020/9/8 16:07 * @describe 跨域配置类 */@Configurationpublic class MyCorsConfiguration { @Bean public CorsWebFilter corsWebFilter() { UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource(); CorsConfiguration corsConfiguration=new CorsConfiguration(); //这里只做演示,故所有条件都允许,生产环境根据自己的要求自己配置 corsConfiguration.addAllowedHeader("*");//允许所有的请求头跨域 corsConfiguration.addAllowedMethod("*");//允许所有的请求方式跨域 如:get post put delete corsConfiguration.addAllowedOrigin("*");//允许所有的请求来源跨域 corsConfiguration.setAllowCredentials(true);//允许携带cookies跨域 source.registerCorsConfiguration("/**",corsConfiguration); return new CorsWebFilter(source); }}
配置后效果:
前端页面地址:localhost:58333
后端api地址:localhost:80(网关)
注意:
博主已经把前端项目用58333端口启动,后端springcloud项目已经用户模块用8080,8081启动,订单模块用9001,9002启动,网关端口用80,注册和配置中心用nacos。该测试Demo统一用网关配置路由。
需要测试案例可关注本公众号,在聊天框中留言,博主可以手把手教你搭建测试用例喲