SpringCloudGetaway 允许跨域设置

Gateway 不是使用的传统的SpringMVC,所以,针对SpringMVC的跨域设置,在Gateway中是不生效的。所以需要先关闭webflux的cors,再从gateway的filter里边设置cors就行了。

简单设置

代码配置:

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;

/**
 * 跨域配置
 */
@Configuration
public class CorsConfig {

    @Bean
    public CorsWebFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        //允许所有请求方法,例如get,post等
        config.addAllowedMethod("*");
        //允许所有的请求来源
        config.addAllowedOrigin("*");
        //允许所有请求头
        config.addAllowedHeader("*");
        //允许携带cookie
        config.setAllowCredentials(true);

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        //对所有经过网关的请求都生效
        source.registerCorsConfiguration("/**", config);

        return new CorsWebFilter(source);
    }
}

Yaml 配置:

spring:
  cloud:
    gateway:
      globalcors:
        corsConfigurations:
          '[/**]':
          	# 允许携带认证信息
            allow-credentials: true
            # 允许跨域的源(网站域名/ip),设置*为全部
            allowedOrigins: "*"
            # 允许跨域的method, 默认为GET和OPTIONS,设置*为全部
            allowedMethods: "*"
             # 允许跨域请求里的head字段,设置*为全部
            allowedHeaders: "*"

经过上面设置,就可以处理简单的跨域问题。


多重跨域

有时候,网关调用的后端微服务,本身设置了跨域,Gateway 和下游系统同时支持了跨域,都会向 response header 中增加Access-Control-Allow-Origin *,出现重复的 * ,导致跨域失效。在Gateway中可以使用 DedupeResponseHeader 来处理一下响应头重复的问题。

spring:
  cloud:
    gateway:
      default-filters:
        - DedupeResponseHeader=Vary Access-Control-Allow-Origin Access-Control-Allow-Credentials, RETAIN_FIRST

DedupeResponseHeader 有三个策略,我们使用RETAIN_UNIQUE即可:

  • RETAIN_FIRST:仅保留第一个值(默认)。
  • RETAIN_LAST:仅保留最后一个值。
  • RETAIN_UNIQUE:按照第一次相遇的顺序保留所有唯一值。

注意: 该版本需要使用高版本的 Getaway,推荐使用 G 版以上。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值