1.使用ajax发送跨域请求接口时,接口能正常接收到请求并响应,但是无法正常展示响应数据。跨域请求时会在有一个特别的请求头origin(请求来源)。浏览器认为这是不安全的。需要在被跨域请求的那个接口,响应时加上加上几个响应头让浏览器允许跨域请求的响应数据展示。springboot准备了一个过滤器来实现这个操作。(如下:8081有个ajax请求8888的接口,需要在8888加上过滤器)
2.在被跨域请求的一方配置一个CrosFilter过滤器到spring里即可
@Bean
public CorsFilter corsFilter() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("http://localhost:8081"); // 允许的域名白名单,可以*
corsConfiguration.addAllowedHeader("*"); // 允许任何头
corsConfiguration.addAllowedMethod(HttpMethod.POST); // 允许哪些类型请求,可以*
corsConfiguration.addExposedHeader("my-header");//自定义请求头
corsConfiguration.setAllowCredentials(true);//是否允许携带cookie
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/sys/generator/list", corsConfiguration); // 哪些path的接口可以被跨域请求
source.registerCorsConfiguration("/sys/generator/code", corsConfiguration);
return new CorsFilter(source);
}
3.再次测试,响应头主要多了这些,也能正常接收到响应数据了
4.对于只有个别需要开放跨域请求的接口可以这样玩,@CrossOrigin的参数跟CrosFilter参数设置过滤器一致。
5.其它解决跨域请求的常用方法:使用Nginx反向代理 或前端不跨域请求,后端专门开放一个API接口供前端调用,接口以httpClient请求数据