springBoot文件下载跨域问题
先说一下场景:
项目有一个需求,就是实现一个,多文件下载成一个 .zip压缩包文件
代码,写好了,并且也配置好了全局的跨域设置,如下代码所示
@Configuration
public class SimpleCORSFilter {
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
final CorsConfiguration corsConfiguration = new CorsConfiguration();
/*是否允许请求带有验证信息*/
corsConfiguration.setAllowCredentials(true);
/*允许访问的客户端域名*/
corsConfiguration.addAllowedOrigin("*");
/*允许服务端访问的客户端请求头*/
corsConfiguration.addAllowedHeader("*");
/*允许访问的方法名,GET POST等*/
corsConfiguration.addAllowedMethod("*");
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(urlBasedCorsConfigurationSource);
}
}
在本地跑没问题,觉得万事大吉了,很开心
然后发布到公司测试服务器
然后问题来了,前端的哥们找我说,我写的批量下载接口跨域了
我心里纳闷,不会呀,项目已经设置了全局的跨域的配置,怎么只有这个批量下载的接口跨域了
找了很久原因,度娘也问了很久,度娘的答案也是绝大部分都是抄来抄去,基本没什么营养
最后实在没办法,就找公司的大牛,他和我说,是不是我批量下载的接口,把全局的跨域配置给清空了
然后,我又仔细去看了一下代码,终于发现了问题的最终原因
如下图所示
上图所示的代码
response.reset(); //这句代码是罪魁祸首,他会清空响应的一些信息,包括全局的跨域配置
所以解决办法是:(选择一个即可)
1、把 response.reset(); 注释掉,如下代码所示
2、response.reset(); 不注释,并且配置如下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了