SpringCloud + Gateway实现跨域

什么是跨域?

跨域
问题描述:已拦截跨源请求:同源策略禁止读取位于 http://localhost:88/api/sys/login 的远程资源。(原因:CORS 头缺少 ‘Access-Control-Allow-Origin’)。

问题分析:这是一种跨域问题。访问的域名和端口和原来的请求不同,请求就会被限制

跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对js施加的安全限制。(ajax可以)

同源策略:是指协议,域名,端囗都要相同,其中有一个不同都会产生跨域;

image

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

image

解决方法

前面跨域的解决方案:

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

image
image

实现

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

image

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 # 这次跨域有效期于相同的跨域请求不会再预检
posted @ 2022-10-15 18:22  长情c  阅读(745)  评论(0)    收藏  举报