微服务SpringCloud跨域问题
一.SpringCloud Web端暴露服务跨域解决方案
public class MyWebAppConfigurer implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST", "OPTIONS")
.allowCredentials(true);
}
}
二.SpringCloud Zuul端暴露服务跨域解决方案
此处需要注意addAllowedOrigin上线应设置为前端地址
@Order
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
final CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("OPTIONS");
config.addAllowedMethod("HEAD");
config.addAllowedMethod("GET");
config.addAllowedMethod("PUT");
config.addAllowedMethod("POST");
config.addAllowedMethod("DELETE");
config.addAllowedMethod("PATCH");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
三.配合Swagger解决跨域解决方案
因为在Swagger和跨域同时出现时,如果发生OPTIONS请求,Swagger优先于跨域生效,会将其驳回,导致复杂Post请求并未发送,此时会出现403异常,所以需要将Swagger排除掉该OPTIONS请求,代码如下
http.csrf().disable().antMatcher("/**").authorizeRequests().antMatchers(HttpMethod.OPTIONS).permitAll()