java - source - jaspersoft studio 6.4 0




Mehrere eindeutige Content-Disposition-Header, die vom Server in Jasperreports empfangen wurden (2)

Es gibt eine ähnliche Diskussion hier - http://productforums.google.com/forum/#!topic/chrome/hhZh_kpei8U

Sehen Sie, ob das hilft

Ich versuche, Content-Disposition Header als Antwort auf Servlet zu setzen, aber ich bekomme diesen Fehler im Browser. Was soll ich machen?

Doppelte Header vom Server erhalten

Die Antwort vom Server enthielt doppelte Header. Dieses Problem ist in der Regel das Ergebnis einer falsch konfigurierten Website oder eines Proxy. Nur die Website oder der Proxy-Administrator können dieses Problem beheben.

Fehler 349 (net :: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION): Mehrere unterschiedliche Content-Disposition-Header empfangen. Dies ist nicht zulässig, um vor HTTP-Response-Splitting-Angriffen zu schützen.

Hier mein Servlet-Controller:

@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;
    }
}

Und JasperPdfView-Klasse:

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 zeigt diese Fehlermeldung möglicherweise an, wenn Sie eine Datei mit einem Komma im Dateinamen herunterladen. Haben Sie wirklich nur "report.pdf" als Dateiname benutzt?

Nach dem Lesen der HTTP-Spezifikationen sollte der Content-Disposition-Header (der nicht Teil der HTTP-Spezifikation selbst ist) kein Kommazeichen enthalten, da er als Trennzeichen für zwei verschiedene Header behandelt wird.

Mehrere Nachrichtenkopfzeilenfelder mit demselben Feldnamen KÖNNEN in einer Nachricht vorhanden sein, wenn der gesamte Feldwert für dieses Kopfzeilenfeld als eine durch Kommas getrennte Liste [dh # (Werte)] definiert ist. Es MÜSSEN möglich sein, die mehreren Header-Felder zu einem "field-name: field-value" -Paar zu kombinieren, ohne die Semantik der Nachricht zu ändern, indem jeder nachfolgende Feldwert an den ersten angehängt wird, jeweils getrennt durch ein Komma.

Wenn Ihr Dateiname also ein Bericht war, May2014.pdf, wird Chrome interpretiert

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

als zwei Werte für den gleichen HTTP-Nachrichtenkopf

Content-Disposition: attachment; filename=report

Content-Disposition: May2014.pdf

was wiederum als ein HTTP-Antwort-Splitting-Angriff interpretiert wird, wahrscheinlich weil es in einer einzelnen HTTP-Antwort tatsächlich keine mehreren Inhalts-Verteilungs-Header-Werte geben sollte.

Andere Browser scheinen das Komma im Dateinamen nicht zu stören.





jasper-reports