tutorial reportes español descargar java servlets http-headers jasper-reports

java - reportes - ireport windows 10



Múltiples encabezados distintos de Content-Disposition recibidos del servidor en Jasperreports (2)

Hay una discusión similar aquí: http://productforums.google.com/forum/#!topic/chrome/hhZh_kpei8U

A ver si eso ayuda

Estoy intentando configurar el encabezado content-disposition en respuesta al servlet, pero obtengo este error en el navegador. ¿Que debería hacer?

Encabezados duplicados recibidos del servidor

La respuesta del servidor contenía encabezados duplicados. Este problema generalmente es el resultado de un sitio web o proxy incorrectamente configurado. Solo el sitio web o el administrador proxy pueden solucionar este problema.

Error 349 (net :: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION): Se recibieron múltiples encabezados diferentes de Content-Disposition. Esto no está permitido para proteger contra ataques de división de respuesta HTTP.

Aquí mi controlador de servlet:

@RequestMapping("/**/paymentOrderReport.pdf") public class PaymentOrderReportViewController extends org.springframework.web.servlet.mvc.AbstractController { private PaymentDao paymentDao; private JasperPdfView pdfView; @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType("application/pdf"); response.setHeader("Content-disposition", "attachment; filename=" + "report.pdf"); PaymentOrderEntity paymentOrderEntity = null; String traceCode = request.getParameter(ParamConstants.TRACE_CODE); if (traceCode != null) { PaymentSheetRequestEntity payRequestEntity = paymentDao.loadByUniqueProperty(PaymentSheetRequestEntity.PROP_TRACE_CODE, traceCode); if (payRequestEntity != null) { paymentOrderEntity = payRequestEntity.getPaymentOrder(); } } if (paymentOrderEntity != null) { List<PaymentOrderEntity> result = new ArrayList<PaymentOrderEntity>(); result.add(paymentOrderEntity); JRDataSource jrDataSource = new JRBeanCollectionDataSource(result); Map<String, Object> model = new HashMap<String, Object>(); model.put("reportData", jrDataSource); return new ModelAndView(pdfView, model); } return null; } public void setPaymentDao(PaymentDao paymentDao) { this.paymentDao = paymentDao; } public void setPdfView(JasperPdfView pdfView) { this.pdfView = pdfView; } }

Y JasperPdfView Class:

public class JasperPdfView extends AbstractJasperReportsView { @Override protected void renderReport(JasperPrint populatedReport, Map<String, Object> model, HttpServletResponse response) throws Exception { JRPdfExporter jrPdfExporter = new JRPdfExporter(); if (getConvertedExporterParameters() != null) { jrPdfExporter.setParameters(getConvertedExporterParameters()); } jrPdfExporter.setParameter(JRExporterParameter.JASPER_PRINT, populatedReport); jrPdfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream()); jrPdfExporter.exportReport(); } }


Google Chrome podría mostrar este mensaje de error si está descargando un archivo que tiene una coma en el nombre del archivo. ¿Realmente usaba simplemente "report.pdf" como nombre de archivo?

Después de leer las especificaciones HTTP, el encabezado Content-Disposition (que no es parte de la especificación HTTP en sí) no debe incluir un carácter de coma, ya que se tratará como un separador para dos encabezados diferentes.

Múltiples campos de encabezado de mensaje con el mismo nombre de campo PUEDEN estar presentes en un mensaje si y solo si el valor de campo completo para ese campo de encabezado está definido como una lista separada por comas [es decir, # (valores)]. DEBE ser posible combinar los múltiples campos de encabezado en un par de "nombre de campo: valor de campo", sin cambiar la semántica del mensaje, agregando cada valor de campo subsiguiente al primero, cada uno separado por una coma.

Entonces, si su nombre de archivo fuera un informe, May2014.pdf, entonces Chrome lo interpretará

Content-Disposition: attachment; filename=report,May2014.pdf

como dos valores para el mismo encabezado de mensaje http

Content-Disposition: attachment; filename=report

Content-Disposition: May2014.pdf

lo que a su vez se interpreta como un ataque de división de respuesta HTTP , probablemente porque en realidad no habrá múltiples valores de encabezado de disposición de contenido en una sola respuesta HTTP.

A otros navegadores no parece importarles la coma en el nombre del archivo.