SpringCloud + Gateway实现跨域
什么是跨域?
跨域
问题描述:已拦截跨源请求:同源策略禁止读取位于 http://localhost:88/api/sys/login 的远程资源。(原因:CORS 头缺少 ‘Access-Control-Allow-Origin’)。
问题分析:这是一种跨域问题。访问的域名和端口和原来的请求不同,请求就会被限制
跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对js施加的安全限制。(ajax可以)
同源策略:是指协议,域名,端囗都要相同,其中有一个不同都会产生跨域;

跨域流程: 这个跨域请求的实现是通过预检请求实现的,先发送一个OPSTIONS探路,收到响应允许跨域后再发送真实请求

解决方法
前面跨域的解决方案:
方法1:设置nginx包含admin和gateway
方法2:让服务器告诉预检请求能跨域


实现
1.配置类实现
因为我这里是个微服务的项目,这里直接在网关配置跨域即可。
GulimallCorsConfiguration
package com.atguigu.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;
/**
* description: GulimallCorsConfiguration
* date: 2022/10/15 16:12
* author: MR.孙
*/
@Configuration
public class GulimallCorsConfiguration {
/**
* 添加跨域过滤器
* @return
*/
@Bean
public CorsWebFilter corsWebFilter(){
//基于url跨域,选择reactive包下的
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
// 跨域配置信息
CorsConfiguration configuration = new CorsConfiguration();
// 允许跨域的头
configuration.addAllowedHeader("*");
// 允许跨域的请求方式
configuration.addAllowedMethod("*");
// 允许跨域的请求来源
configuration.addAllowedOrigin("*");
// 是否允许携带cookie跨域
configuration.setAllowCredentials(true);
// 任意url都要进行跨域配置
source.registerCorsConfiguration("/**", configuration);
return new CorsWebFilter(source);
}
}
2.yml配置
SpringCloud的Gateway配置文档:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#cors-configuration

server:
port: 10010
spring:
application:
name: gatewayservice
cloud:
nacos:
server-addr: 192.168.2.22:8848 # Nacos地址
gateway:
globalcors:
cors-configurations:
'[/**]':
allowedOrigins: "https://www.javacui.com" # 允许那些网站跨域访问
allowedMethods: "GET" # 允许那些Ajax方式的跨域请求
allowedHeaders: "*" # 允许请求头携带信息
allowCredentials: "*" # 允许携带cookie
maxAge: 360000 # 这次跨域有效期于相同的跨域请求不会再预检

浙公网安备 33010602011771号