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; } }
|
区别
分使用场景
假如你用了servlet
的filter
,并filter
前提返回了请求结果,用FilterRegistrationBean
方式才行,因为此时请求还没到WebMvcConfigurer
处理就已经返回了。
没这种情况两者行为一样。
方式三
跨域无非就是在header
里写入控制跨域相关的字段信息,自己实现Filter
或者Interceptor
就行了。