Spring Cloud Gateway解决前端请求跨域问题

在前后端分离的项目中,一般都会碰到跨域问题,对于直接请求后端应用的情况,可以直接参考:Spring Boot 解决前端请求跨域问题

而随着微服务架构概念的提出,API网关成为了微服务架构的一个标配组件。所有的客户端都通过统一的网关接入微服务,在网关层处理所有非业务功能。

因此,需要在网关这边处理跨域问题。

Spring Cloud Gateway解决跨域问题

在网关代码中增加配置类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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 GwCorsFilter {
@Bean
public CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
// 允许cookies跨域
config.setAllowCredentials(true);
// 允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin
config.addAllowedOrigin("*");
// 允许访问的头信息 *表示全部
config.addAllowedHeader("*");
// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了
config.setMaxAge(18000L);
// 允许的方法 可设置* 即允许全部http请求方法类型
config.addAllowedMethod("OPTIONS");
config.addAllowedMethod("HEAD");
config.addAllowedMethod("GET");
config.addAllowedMethod("PUT");
config.addAllowedMethod("POST");
config.addAllowedMethod("DELETE");
config.addAllowedMethod("PATCH");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);
}
}

如果出现以下错误:

1
The ‘Access-Control-Allow-Origin’ header contains multiple values “*, *”, but only one is allowed.

这是因为后台接口也配置了跨域,重复配置导致的,一个比较简单的办法就是把后台接口的跨域配置去掉。

参考


----------- 本文结束啦感谢您阅读 -----------

赞赏一杯咖啡

欢迎关注我的其它发布渠道