记一次网关跨域的问题
跨域是怎样产生的就不写了,主要记录问题发生的场景及解决
先交代下背景 服务的注册中心是eureka 网关是springCloud gateway
在一次开发中,要和前端的同事联调,我将接口给他,让他来调,每个接口我都用postman试过,参数没问题的话基本能通(项目紧先不考虑那么多),他通过前端的服务访问我时,跟我说跨域了。
我:哦,等我一下(我想起来服务都没加跨域,于是挨个加上)
我:再试下
他:好了
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = jHipsterProperties.getCors();
if (config.getAllowedOrigins() != null && !config.getAllowedOrigins().isEmpty()) {
log.debug("Registering CORS filter");
source.registerCorsConfiguration("/**/**", config);
}
return new CorsFilter(source);
}
我还是比较欢喜的,然后其中大部分接口需要通过网关A服务来转发到B服务的接口上,于是将转发地址告诉了他,他一访问
他:跨域
我:????咋回事
他给我发来F12的截图,确实是跨域。可我都加了啊,百般调试,不行,能用的方法都用了,不行!我又看他发来的截图感觉不对,说不上哪里不对
我:你打开f12 点到network下,再请求下我看看
他给我发来图片(图片没有保存,真是太可惜了)
我:点那个请求,我看看请求头
大概就是上面这个样子,但是!!!!同样的头信息,有两份!!!
我似乎明白了什么,通过我的A服务转发到B服务,每个服务都给添加了允许跨域的头信息,可不就是两份吗?于是把其中一个服务的跨域注释掉了
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = jHipsterProperties.getCors();
if (config.getAllowedOrigins() != null && !config.getAllowedOrigins().isEmpty()) {
log.debug("Registering CORS filter");
//source.registerCorsConfiguration("/**", config);
}
return new CorsFilter(source);
}
(暂时先这样,后续可以拦截自己决定)
没出意外,成功了!!!这个坑我记下了!