1、什么是请求跨域?为什么会出现请求跨域的问题?
跨域问题是浏览器为了保护用户安全而采用的同源策略(Same-Origin Policy),即只
允许页面页面请求同源(相同 域名、协议和端口);若页面请求违背了同源策略,即
请求目标与当前页面的域名、协议、端口不一致时,浏览器会阻止请求或接收。
2、使用spring web 下的 CorsWebFilter 实现跨域
将 CorsWebFilter 注入到spring ioc容器中可以实现去所有的请求/应答实现跨域;
一般将类 CorsConfiguration 放到网关中,表示对所有的请求/应答实现跨域;
CorsConfiguration 代码如下:
@Configuration
public class CorsConfiguration {
@Bean
CorsWebFilter corsWebFilter(){
//用于添加映射地址
UrlBasedCorsConfigurationSource corsSource = new UrlBasedCorsConfigurationSource();
//配置CORS,即允许跨域的请求
CorsConfiguration corsConfiguration = new CorsConfiguration();
//配置跨域
corsConfiguration.addAllowedHeader("*");//允许跨域的请求头,“*” 允许所有的请求头跨域
corsConfiguration.addAllowedMethod("*");//允许跨域的请求方式,“*”允许所有的请求方式跨域
corsConfiguration.addAllowedOrigin("*"); //允许跨域的域,“*”允许所有的Origin 跨域
corsConfiguration.setAllowCredentials(true); //true表示允许所有带cookie的请求跨域
corsConfiguration.addExposedHeader("*"); //暴露的头部信息
//添加映射地址
corsSource.registerCorsConfiguration("/**",corsConfiguration);
return new CorsWebFilter(corsSource);
}
}
注意:
在 Spring 5.3 之后,配置类 CorsConfiguration 中将 addAllowedOrigin 方法名修改为 addAllowedOriginPattern,所以在spring5.3之后上边 corsConfiguration.addAllowedOrigin("*");
就变成了 corsConfiguration.addAllowedOriginPattern("*");