You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Richfaces迁移至Primefaces时文件下载的FilterServletResponseWrapper替换问题

Primefaces迁移下ContentCachingResponseWrapper注入实现方案

实现步骤

  • 新增自定义Servlet Filter,配置优先级高于Spring Security过滤链,确保响应包装逻辑先于框架默认包装执行
  • Filter核心逻辑:匹配所有下载请求路由(可根据接口路径、请求头特征判断,也可全局生效),将原生HttpServletResponse封装为ContentCachingResponseWrapper实例传入后续过滤链
  • 过滤链执行完成后,显式调用ContentCachingResponseWrapper的copyBodyToResponse()方法,将缓存的下载内容写回原始响应,避免返回空内容
  • 调整Primefaces触发组件配置:给p:commandLink添加ajax="false"属性,关闭AJAX提交,避免Primefaces AJAX响应处理器劫持下载流,导致自定义包装器逻辑失效
  • 业务控制器内获取包装器时,可通过递归拆包的方式读取:循环判断当前响应对象是否为ServletResponseWrapper子类,若是则调用getResponse()获取嵌套的内层响应,直到匹配到ContentCachingResponseWrapper类型,即可调用getContentInputStream()方法读取缓存的下载流

注意事项

若项目存在其他自定义响应包装逻辑,调整当前Filter的Order值为最小,确保ContentCachingResponseWrapper处于包装器最外层,后续所有框架操作均基于该包装实例执行


内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 00:36:10