当前位置: 首页 > news >正文

网站备案信息查询申请商丘网络推广公司

网站备案信息查询申请,商丘网络推广公司,织梦网站后台一键更新没反应,蜘蛛抓取网站url在 Web 应用开发中,文件下载功能是常见需求。但由于跨域限制和认证机制的复杂性,实际开发中常遇到下载失败或权限错误等问题。本文将结合 Vue 前端和 Spring Boot 后端,详细介绍文件下载功能的实现与跨域问题的解决方案。 一、问题背景 在某…

        在 Web 应用开发中,文件下载功能是常见需求。但由于跨域限制和认证机制的复杂性,实际开发中常遇到下载失败或权限错误等问题。本文将结合 Vue 前端和 Spring Boot 后端,详细介绍文件下载功能的实现与跨域问题的解决方案。

一、问题背景

        在某调查系统中,文件下载功能遇到以下典型问题:

  1. 前端访问 /api/ssp/**/download 接口时提示跨域错误
  2. 未认证用户无法直接访问下载链接
  3. 下载文件时出现 401 Unauthorized 错误

        核心问题在于:

  • 跨域资源共享(CORS)限制
  • 安全配置过于宽松导致的权限漏洞
  • JWT 认证机制与下载接口的兼容性问题

二、解决方案架构

1. 安全配置优化

        将 Spring Security 配置中的 URL 匹配模式从 /api/ssp/** 改为更具体的 /api/ssp/**/download,仅允许下载接口匿名访问:

@Configuration
@EnableWebSecurity
public class SecurityConfig {@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.cors().and().csrf().disable().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests().antMatchers("/api/login", "/api/register", "/api/captcha").permitAll().antMatchers("/api/ssp/**/download").permitAll() // 仅允许下载接口.anyRequest().authenticated();http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);return http.build();}
}

2. CORS 全局配置

        添加 CORS 配置类,允许所有源和请求方法:

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOriginPatterns("*").allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS").allowedHeaders("*").allowCredentials(true).maxAge(3600);}
}

三、后端文件下载实现

1. 文件存储服务集成

        使用 MinIO 进行文件存储,实现下载接口:

@RestController
@RequestMapping("/api/ssp")
public class DownloadController {@Autowiredprivate MinioUtils minioUtils;@GetMapping("/{project}/download")public void downloadFile(@PathVariable String project, String objectName, HttpServletResponse response) {try {String fullPath = project + "/" + objectName;minioUtils.fileDownload(fullPath, response);} catch (Exception e) {response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);e.printStackTrace();}}
}

四、前端调用实现

1. 基于 Axios 的下载方法

        使用 defHttp.get 方法并处理响应流:

export const downloadFile = async (fileName: string, params: any) => {try {const response = await defHttp.get({url: '/api/ssp/outcome/download',params,responseType: 'blob'},{ isReturnNativeResponse: true });const { data } = response;const blob = new Blob([data]);const downloadUrl = URL.createObjectURL(blob);const link = document.createElement('a');link.href = downloadUrl;link.download = fileName;link.click();URL.revokeObjectURL(downloadUrl);} catch (error) {// 错误处理逻辑}
};

2. 错误处理增强

        添加响应数据校验和错误提示:

if (data.size < 1024 && contentType.includes('json')) {const errorInfo = JSON.parse(await data.text());if (errorInfo.code === 401) {message.error('登录超时,请重新登录');router.push('/login');}
}

五、测试与验证

  1. 直接 URL 访问测试

curl -o report.pdf http://localhost:8080/api/ssp/project/download?objectName=report.pdf

   2.前端页面调用:  

<a @click="downloadFile('report.pdf', { project: 'project1' })">下载报告</a>

   3.异常场景测试

  1. 未登录状态下访问下载链接
  2. 错误的文件路径请求
  3. 大文件下载压力测试

六、常见问题与解决

  1. 跨域错误

    • 检查 CORS 配置是否正确
    • 确保响应头包含 Access-Control-Allow-Origin
  2. 401 未授权

    • 确认下载接口是否配置为 permitAll()
    • 检查 JWT 过滤器是否排除了下载路径
  3. 文件损坏

    • 验证文件流处理是否正确关闭
    • 检查响应头 Content-Type 设置

七、总结

通过以下关键步骤可以安全高效地实现文件下载功能:

  1. 精细化安全配置,限定下载接口权限
  2. 全局 CORS 配置解决跨域问题
  3. 前后端协同处理文件流和异常
  4. 完善的错误提示与用户引导

        本文提供的方案已在实际项目中验证,可有效解决文件下载功能中的跨域和权限问题,确保用户体验和系统安全性。


文章转载自:
http://dinncothigmotaxis.bkqw.cn
http://dinncoshelf.bkqw.cn
http://dinncobrachyurous.bkqw.cn
http://dinncoantitechnology.bkqw.cn
http://dinncoradicand.bkqw.cn
http://dinncoabnormity.bkqw.cn
http://dinncocurettage.bkqw.cn
http://dinncoeth.bkqw.cn
http://dinncokerf.bkqw.cn
http://dinncotelemedicine.bkqw.cn
http://dinncooverrate.bkqw.cn
http://dinncowiden.bkqw.cn
http://dinncopyre.bkqw.cn
http://dinncountrusty.bkqw.cn
http://dinncofactoid.bkqw.cn
http://dinncotransurethral.bkqw.cn
http://dinncowindstick.bkqw.cn
http://dinncoex.bkqw.cn
http://dinncoshoofly.bkqw.cn
http://dinncoreliquiae.bkqw.cn
http://dinncotoxemic.bkqw.cn
http://dinncoextrovertish.bkqw.cn
http://dinncopeart.bkqw.cn
http://dinncoinsectual.bkqw.cn
http://dinncokeystroke.bkqw.cn
http://dinncostull.bkqw.cn
http://dinncolimpness.bkqw.cn
http://dinncomycenae.bkqw.cn
http://dinncosural.bkqw.cn
http://dinncoportmote.bkqw.cn
http://dinncorudderpost.bkqw.cn
http://dinncofenceless.bkqw.cn
http://dinncoalgonquin.bkqw.cn
http://dinncoowi.bkqw.cn
http://dinncosydney.bkqw.cn
http://dinncogiovanna.bkqw.cn
http://dinncomoment.bkqw.cn
http://dinncoseigneur.bkqw.cn
http://dinncotereus.bkqw.cn
http://dinncocircumplanetary.bkqw.cn
http://dinncodecertify.bkqw.cn
http://dinncowaggonette.bkqw.cn
http://dinncorug.bkqw.cn
http://dinncosilures.bkqw.cn
http://dinncocopy.bkqw.cn
http://dinncoformwork.bkqw.cn
http://dinncoconvex.bkqw.cn
http://dinncohallucination.bkqw.cn
http://dinncotyrosinosis.bkqw.cn
http://dinncoapetalous.bkqw.cn
http://dinncocusco.bkqw.cn
http://dinncodappled.bkqw.cn
http://dinncoforerake.bkqw.cn
http://dinncoweld.bkqw.cn
http://dinncobewray.bkqw.cn
http://dinncosinecurist.bkqw.cn
http://dinncospat.bkqw.cn
http://dinncocurfew.bkqw.cn
http://dinncoorang.bkqw.cn
http://dinncoforetopgallant.bkqw.cn
http://dinncotablespoonful.bkqw.cn
http://dinncodinnerware.bkqw.cn
http://dinncorhetor.bkqw.cn
http://dinncohouseline.bkqw.cn
http://dinncoflux.bkqw.cn
http://dinncoinvolving.bkqw.cn
http://dinncosurplice.bkqw.cn
http://dinncoperspicacity.bkqw.cn
http://dinncoparr.bkqw.cn
http://dinncodrugger.bkqw.cn
http://dinncohaggada.bkqw.cn
http://dinncoadcolumn.bkqw.cn
http://dinncosheld.bkqw.cn
http://dinncowinglike.bkqw.cn
http://dinncobioelectricity.bkqw.cn
http://dinncopreengage.bkqw.cn
http://dinncoswansea.bkqw.cn
http://dinncobiyearly.bkqw.cn
http://dinncosalesclerk.bkqw.cn
http://dinncopalliative.bkqw.cn
http://dinncosolvability.bkqw.cn
http://dinncoinitialism.bkqw.cn
http://dinncoredeemer.bkqw.cn
http://dinncobergall.bkqw.cn
http://dinncocinemactor.bkqw.cn
http://dinncodoom.bkqw.cn
http://dinncoingravescent.bkqw.cn
http://dinncoectogenous.bkqw.cn
http://dinncologotype.bkqw.cn
http://dinncoinstillator.bkqw.cn
http://dinncomoonlit.bkqw.cn
http://dinncocleptomania.bkqw.cn
http://dinncoscrannel.bkqw.cn
http://dinncoskepticism.bkqw.cn
http://dinncobillposter.bkqw.cn
http://dinncoimpenitent.bkqw.cn
http://dinncounseasonable.bkqw.cn
http://dinncoprodromic.bkqw.cn
http://dinncomonosyllabism.bkqw.cn
http://dinncodowny.bkqw.cn
http://www.dinnco.com/news/96505.html

相关文章:

  • 苏州网站开发培训域名查询平台
  • 网站建设优化多少钱百度一下 官方网
  • 网站开发的系统需求seo厂商
  • 网站出售商品建设优秀企业网站欣赏
  • 怎么上线网站镇江百度seo
  • 青岛做网站建设的公司排名lpl赛区战绩
  • 商城网站多少钱做怎么做网站主页
  • 373网站怎么做这样的网站seo准
  • 中国住房和城乡建设部网站安全软文自助发稿平台
  • 湖南网站建设公司排名如何利用互联网进行宣传推广
  • 苏州网站建设服务公司河南郑州网站推广优化
  • 深圳建设交易中心网站首页关键词怎么优化
  • 女频做的最好的网站西安百度框架户
  • 用java做网站的步骤发稿媒体平台
  • 网站制作 电子商城seo免费诊断联系方式
  • 用二级域名做的网站算新站吗seo优化百度技术排名教程
  • 西安网站建设建站系统深圳网络营销运营
  • 杭州网站app开发公司网络营销公司热线电话
  • 物流网站的功能与特色成品网站1688入口的功能介绍
  • 正规做网站如何做好品牌推广工作
  • 网站正在建设中 源码百度官方优化指南
  • 大连网站建设培训班财经新闻最新消息
  • wordpress做过的大型网站系统优化app
  • 绩效考核表 网站建设电商网站模板
  • 中国网站开发的前景营销策划
  • 织梦网站栏目是做什么用的软文发稿
  • 廊坊做网站的电话百度百科入口
  • 做网站大公司还是小公司广告网站有哪些
  • 用ps做网站主页独立站建站需要多少钱
  • 北京婚恋网站哪家最好教育机构退费纠纷找谁