关于跨域问题请先看我的另一篇文章:
blog.csdn.net/fsjwin/arti…
这里再列举出一种编码方式,(注意不是nginx的解决方案)是通过编码的方式告诉浏览器可以跨域访问了。
1. 在网关服务中添加Filter
@Component
public class MyCorsConfiguration {
/**
*
* @return CorsWebFilter 为愧于的webfilter 有spring框架提供
*/
@Bean
public CorsWebFilter corsWebFilter(){
/**
* 返回一个CorsWebFilter ,构造其中需要传入连个形参,均为接口,可以直接new 接口
* 是借口可以使用它的实现类来处理
*/
UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
//构建CorsConfiguration
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.addAllowedHeader("*");
// 允许cookie跨域
corsConfiguration.setAllowCredentials(true);
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**",corsConfiguration);
return new CorsWebFilter(urlBasedCorsConfigurationSource);
}
}
CorsWebFilter :是有spring提供的过滤器,会在请求到来之前和返回时经过这个过滤器,放入spring的容器中即可生效。
2. 在网关服务中添加Filter
跨域访问分两次
- 第一次options请求,此时请求到达gateway,网关在相应报文中告诉浏览器可以跨域:
- 浏览器发起真正的请求,则可以跨域,原理是跨域是浏览器的策略。
这是通过编码的方式骗过浏览器的解决方案,在生产上使用nginx代理的方式解决。