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

线上与测试环境excel导出列不同

  1. 在用户有查看年龄权限时,年龄列有列名但无法展示。

线上导出表格为

姓名年龄手机号
张三13111112323
李四14222223434

线下导出表格为

姓名年龄手机号
张三1813111112323
李四2014222223434
  1. 用户无查看年龄权限时,正常屏蔽年龄列

线上导出表格为

姓名手机号
张三13111112323
李四14222223434

线下导出表格为

姓名手机号
张三13111112323
李四14222223434

在无权限时正常屏蔽。

问题定位

代码具体逻辑为先查询500条数据开始写入excel,在写入excel的时候预查询下一批需要写入的数据

public void export(...) { boolean canViewAge = isAuthorizationViewAgeUser(); // 主线程判断 ExcelUtils.exportData(..., userService::queryPage, // 异步线程查询+映射 writer -> { if (!canViewAge) { // 主线程控制列 writer.includeColumnFieldNames(fieldNamesExcluding(..., "age")); } }, 500 ); }

根因

权限判断与数据脱敏不在同一线程上下文:

  • 表头列控制使用的是主线程的canViewAge(因此保留年龄列)
  • 数据查询在异步线程执行,异步线程无法稳定获取SecurityContext
  • 导致异步线程判断该用户无权限,将年龄字段置空

触发条件

导出采用分批异步预查询(每批500条)

  1. 主线程先判断权限 canViewAge
  2. 开始写当前批Excel
  3. 同时在线程池异步预查询下一批数据

修复

public void export(...) { canViewAge = isAuthorizationViewAgeUser(); exportData( query, writerCustomizer -> { if (!canViewAge) { writer.includeColumnFieldNames(fieldNamesExcluding(ExportData.class, "age")); } }, (q, pageNum, pageSize) -> queryPage(q, pageNum, pageSize, canViewAge), // 显式透传 500 );
http://www.jsqmd.com/news/1106764/

相关文章:

  • SwapU项目数据库设计文档
  • 第一章Netty,Selector处理可写事件
  • 若依框架整合SM2国密算法:前后端登录加密改造实战
  • 宠物类型小程序积分社区系统模板分享
  • 番茄小说下载器完整指南:构建个人数字图书馆的终极方案
  • 婚内财产协议公证需要什么材料?婚内财产协议公证多久出证?
  • LangGraph 工作流:工程实践里的常见坑
  • AI大模型就业:把学习路线变成作品集
  • CNC件检测还在靠三坐标抽检?嘉腾自动影像仪让批量全检成为现
  • 加拿大UPS折扣快递注册打Label流程
  • Chroma:AI 应用的向量数据库,四行代码搞定语义搜索
  • 2026 年国内主流 AI 工具深度用户指南
  • ROS2 Jazzy 动作通信 (Action) 完整实战教程(C+++Python 双实现)
  • 如何用3分钟为Chrome添加免费视频下载能力:VideoDownloadHelper完全指南
  • 基于DPU的高性能键值存储系统DPA-Store设计与优化
  • 深入学习Redis(1):Redis内存模型
  • 【微服务学习笔记】分布式锁与线程锁的理解和使用
  • BetterNCM安装器完整指南:3分钟为网易云音乐安装插件管理器
  • Three.js 模糊反射(drei转原生)教程
  • LangGraph实战:构建有状态AI工作流引擎
  • 移动端AI落地实战:从模型部署到商业验证的完整链路
  • logback实战详解fileNamePattern配置问题%d多级日期文件夹
  • Dify接入高德地图MCP服务详细配置教程
  • 当反射内存环网中出现“Own Data”指示灯不亮的情况,可能的原因和排查步骤
  • 记一次内存溢出的分析经历
  • 耶鲁牛津剑桥等全球EMBA精英集聚复旦,拓数派董事长冯雷全英文授课“用Ontology实现零代码构建智能体”
  • 洗牙并非简单清洁:规范洁牙科普指南
  • Gemini AI工具全家桶深度应用指南
  • Java毕业设计-基于 SpringBoot 的线上手办周边商城系统的设计与实现 基于 SpringBoot 的动漫手办周边电商管理系统(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • LabVIEW让故障排查从“猜“变“算“