2013-03-24 4 views
5

サーブレットの応答としてコンテンツ処理ヘッダーを設定しようとしていますが、ブラウザでこのエラーが表示されます。私は何をすべきか?Jasperreportsのサーバーから複数の異なるContent-Dispositionヘッダーを受信しました

重複ヘッダはサーバ

重複ヘッダーを含まサーバからの応答から受け取りました。この問題は、通常、 の設定が誤っているウェブサイトまたはプロキシの結果です。ウェブサイトまたはプロキシ 管理者のみがこの問題を解決できます。

エラー349(net :: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION):複数の 異なるContent-Dispositionヘッダーが受信されました。これは、 HTTPレスポンス分割攻撃から保護することはできません。ここで

私のサーブレットコントローラ:

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

そしてJasperPdfViewクラス:

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(); 
    } 

} 
+0

これで進歩はありますか?私は同じエラーが発生している – dgmora

+0

すべての進捗状況?私はChromeブラウザで同様の問題に直面しています(IE、FF、Safariの他のブラウザでは問題ありません) –

答えて

14

移動を助けている場合を参照してください。 ogleファイル名にコンマが含まれているファイルをダウンロードすると、このエラーメッセージが表示されることがあります。本当に "report.pdf"だけをファイル名として使用していましたか?

HTTP specsを読むと、Content-Dispositionヘッダー(HTTP仕様自体には含まれません)には、2つの異なるヘッダーの区切り文字として扱われるため、カンマ文字は含めないでください。

同じフィールド名を持つ複数のメッセージヘッダーフィールドは、そのヘッダーフィールドのフィールド値全体がカンマで区切られたリスト[すなわち、# )]。メッセージのセマンティクスを変更せずに、複数のヘッダーフィールドを1つの "field-name:field-value"のペアにまとめることができなければならない(MUST)。

あなたのファイル名がレポートしたのであれば、May2014.pdfは、Chromeが同じHTTPメッセージヘッダのための2つの値

Content-Disposition: attachment; filename=report

Content-Disposition: May2014.pdf

として

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

を解釈

私はn turnはHTTP response splitting attackと解釈されます。これは実際には単一のHTTP応答に複数のContent-Dispositionヘッダー値が存在しないためです。

他のブラウザでは、ファイル名にコンマは気にならないようです。

+1

私のファイル名はreport.pdfではありません。 – united