springboot跨域设置

springboot提供了两种跨域方式

  • 实现WebMvcConfigurer接口的addCorsMappings方法
  • FilterRegistrationBean添加CorsFilter

方式一

1
2
3
4
5
6
7
8
9
10
11
12
13
@Configuration
public class WebConfig implements WebMvcConfigurer {

@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.maxAge(3600);
}

}

方式二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Configuration
public class WebConfig {

@Bean
public FilterRegistrationBean<CorsFilter> corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOriginPattern("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
bean.setName("corsFilter");
return bean;
}

}

区别

分使用场景

假如你用了servletfilter,并filter前提返回了请求结果,用FilterRegistrationBean方式才行,因为此时请求还没到WebMvcConfigurer处理就已经返回了。

没这种情况两者行为一样。

方式三

跨域无非就是在header里写入控制跨域相关的字段信息,自己实现Filter或者Interceptor就行了。