一、跨域和同源策略
跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域;
二、解决办法
1.通过nginx进行路由转发
此方法配置上繁琐,不推荐
2.预检请求
非简单请求(put delete)等,需要先发送预检请求
举例:可以在网关处进行预检,之后再进行网关转发响应的微服务中
代码演示:
package com.orange.gulimall.gateway.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
@Configuration
public class GulimallCorsConfiguration {
@Bean
public CorsWebFilter corsWebFilter(){
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
//1 配置跨域
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.setAllowCredentials(true);
source.registerCorsConfiguration("/**",corsConfiguration);
return new CorsWebFilter(source);
}
}
3.直接在YAML进行配置
说明:YAML是指在nacos中的配置,nacos可作为注册中也可作为配置中心,也可以在本地中进行配置,其效果基本一致
spring:
cloud:
gateway:
globalcors:
cors-configurations:
'[/**]': # 匹配所有请求
allowedOrigins: "*" #跨域处理 允许所有的域
allowedMethods: # 支持的方法
- GET
- POST
- PUT
- DELETE
总结
其实三个方法都可以执行,但是的话,推荐使用第三种方法,因为简洁,但是,非常明显的一点是直接使用第三种是不行的,存在后端安全性问题,可以结合nginx路由转发+网关截取或替换进行解决
以上算是跨域的一个思路,仅作为参考(不局限以上方法)