数据安全业务操作基本原则,Broken pipe,伪代码,生成xls下载文件响应返回

数据安全业务操作基本原则,Broken pipe,伪代码,生成xls下载文件响应返回

1.查询数据的原则,不要跨度时间太长。
比如尝试获取1年的数据,业务报表等不支持,测试的步骤:
1. curl客户端导出xlsx失败

--connect-timeout 30 --max-time 300  测试发现这两个参数没有作用。
curl -X GET -o scooterOrder_output_file_250101_250331.xlsx --connect-timeout 30 --max-time 300 "http://XX.XX.1.XX:1168/console/cipcOrder/exportNew?settleStartTime=20250101000000&settleEndTime=20250331235959"

2. 通过test接口来触发邮件发送,失败

auto-java-transRenterService  恢复到20秒 ,设置feign超时没有解决
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds = 60000
ribbon.ReadTimeout = 60000
ribbon.ConnectTimeout = 60000

3. 最终在腾讯云dmc按SQL脚本,分3个月一次来导出。成功

结论:大数据量的,不介意来操作。会超时

2.上架商品 去掉人像,避免纠纷。 上传的原则。 如果存在头像,可以去掉再上传。

3.提取数据原则,数据安全管理。需要走流程来操作提取。 预防营销可能会拿到数据骚扰客户,导致甲方的投诉。

4.信息安全处理 观念,数据备份。 资源释放之前/余额不足等关键环节的提醒通知(多人,多方式短信/邮件/语音等),数据备份等,本地机房的物理备份,云服务器的异地备份等方案。

5.阿里云AI助理等咨询回答,仅仅是参考信息,关键确认的问题,必须得提工单咨询技术支持来答复。避免AI的以偏概全,误导信息。

 

扩展

1.

Uncaught exception thrownorg.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe

ClientAbortException: java.io.IOException: Broken pipe 异常通常表示客户端在服务器完成响应前关闭了连接。

🔍 异常原因分析
客户端主动中断‌:用户刷新页面、关闭浏览器或取消请求时,客户端会主动关闭连接。
网络问题‌:网络不稳定或延迟较高可能导致连接中断。
服务器配置‌:服务器超时设置过短,无法处理耗时较长的请求。
大文件传输‌:进行文件上传、下载或大数据量传输时,传输时间过长可能引发异常。
代理服务器超时‌:Nginx等反向代理服务器的读超时设置(如默认60秒)若短于后端处理时间,也会关闭连接。
服务器负载过高‌:服务器资源(CPU、内存、带宽)不足导致处理缓慢,引发超时

2.

//伪代码,生成xls下载文件响应返回

@RequestMapping(value = "/exportNew", method = RequestMethod.GET)
    public ResponseData<?> exportNew(TransReqVO reqVO, HttpServletResponse response) {
        try {
            reqVO = this.initParam(reqVO);
            reqVO.setExcel("excel");
            logger.info("代步车订单查询条件错误日常开发入参,reqVO={}", reqVO.toString());
            //数据查询
            if(responseData != null && ErrorCode.SUCCESS.getCode().equals(responseData.getResCode())){
                ExcelUtil<TransNewModel> excelUtil = new ExcelUtil<TransNewModel>("代步车订单");
                try {
                    //数据转换 本地生成需要  @ExcelElement
                    
                    //导出
                    excelUtil.export(convertList);
                    //设置xls响应类型-关键
                    excelUtil.flushToRequest(response, "NEW_TRANS_" + DateUtil.DATETIME_SEC_STR_FORMAT(new Date()));
                    return null;
                } catch (Exception e) {
                    logger.error("Export trans on failed,reason is :", e);
                }
            }else{
                return null;
            }

        } catch (Exception e) {
            log.error("Get tenant order export exception :", e);
        }
        return null;
    }


public void flushToRequest(HttpServletResponse response, String fileName)
            throws Exception {
        if (fileName == null) {
            fileName = "default";
        }
        try {
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-disposition",
                    String.format("attachment;filename=%s.xls", new String(fileName.getBytes("gb2312"),"iso8859-1")));
            OutputStream ouputStream = response.getOutputStream();
            exportStream(ouputStream);
        } catch (Exception e) {
            logger.error("导出excel错误:", e);
            throw e;
        }
    }
    
        public HSSFWorkbook wb;

public void exportStream(OutputStream o) throws Exception {
        try {
            wb.write(o);
            o.flush();
            o.close();
        } catch (Exception e) {
            logger.error("导出excel错误:", e);
            throw e;
        }
    }

 

posted on 2025-11-26 15:58  oktokeep  阅读(8)  评论(0)    收藏  举报