GateWay在使用的过程中可能会遇到跨域的问题,这时候我们就需要相关的配置来解决这个问题
1. 方案一(不推荐)
添加一个CorsConfig配置类(如果不行,可以不写此类,和springcloud的版本有关,请使用第二种或第三种方案),但推荐使用配置文件的方式
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;
import org.springframework.web.util.pattern.PathPatternParser;
/**
* <h5>描述:跨域访问控制,前后分离必配</h5>
* 推荐采用配置文件的方式来实现
*/
public class CorsConfig {
public CorsWebFilter corsFilter() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
// 允许任何域名使用
corsConfiguration.addAllowedOrigin("*");
// 允许任何头
corsConfiguration.addAllowedHeader("*");
// 允许任何方法(post、get等)
corsConfiguration.addAllowedMethod("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
source.registerCorsConfiguration("/**", corsConfiguration);
return new CorsWebFilter(source);
}
}
2. 方案二
配置application.yml
spring:
cloud:
gateway:
globalcors:
cors-configurations:
'[/**]':
allowedOrigins: "*"
allowedHeaders: "*"
allowedMethods: "*"
allowCredentials: true
add-to-simple-url-handler-mapping: true # 允许来自所有域名(allowedOrigins)的所有请求方式(allowedMethods)发出CORS请求
3. 方案三
配置application.properties
# 允许任何域名使用
spring.cloud.gateway.globalcors.corsConfigurations.[/**].allowedOrigins=*
# 允许任何头
spring.cloud.gateway.globalcors.corsConfigurations.[/**].allowedHeaders=*
# 允许任何方法(post、get等)
spring.cloud.gateway.globalcors.corsConfigurations.[/**].allowedMethods=*
# sessionid 多次访问一致
spring.cloud.gateway.globalcors.corsConfigurations.[/**].allowCredentials=true
# 允许来自所有域名(allowedOrigins)的所有请求方式(allowedMethods)发出CORS请求
spring.cloud.gateway.globalcors.add-to-simple-url-handler-mapping=true
4. 模拟跨域
找一个有jquey的网站,F12打开控制台,在控制台中输入一个ajax请求,换上自己的请求地址和参数,发送即可
$.post('url', '{"variables": {"code": "1234567890", "tpye": "pc"}}');