Spring Boot解决跨域问题
方法一(常用)
实现接口WebMvcConfigurer,并重写addCorsMappings(CorsRegistry registry)
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.maxAge(3600);
}
}
方法二
在上下文中创建一CorsFilter类型的bean,因为http请求到达时序为:filter,servlet,拦截器(HandlerInterceptor)
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.setAllowCredentials(true);
UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(urlBasedCorsConfigurationSource);
}
}
方法三
向@RequestMapping(其他Mapping注解也行)注解处理程序方法添加一个@CrossOrigin注解
@CrossOrigin
三种方法对比
- 细粒度(小到大):3 < 1 < 2
- 版本要求: 3 > 2 >=1
- 区别:方法1使用WebMvcConfigurer接口,方法2使用filter,方法3使用注解