ページの先頭です。
ここから本文です。

お知らせ

[WebOTX] HTTPリクエストメッセージボディが最大8192バイトしか取得できない問題と対策について


概要

サーブレットでHTTPリクエストのメッセージボディを取得する際に、 javax.servlet.HttpServletRequestのgetReader を使用すると 最大でも8,192バイトしか取得できないため結果異常となる場合があります。


影響のある製品

次の製品が該当します。

  • WebOTX Application Server Express V9.2~9.4
  • WebOTX Application Server Standard V9.2~9.4
  • WebOTX Application Server Enterprise V9.2~9.4

詳細

以下の条件を同時に満たす場合に、8193バイト目以降のデータが取得できません。

  • HTTPリクエストのメッセージボディサイズが8192バイトより大きい
  • Webアプリケーション内で、javax.servlet.HttpServletRequestのgetReader メソッドで取得したBufferedReaderを使ってリクエストメッセージボディを取得している。
例えば、下記の実装例で8192バイトを超えるメッセージボディを持つHTTPリクエストを 受信した場合、readLine では例外が発生せずに8192バイトちょうどのデータを取得 した時と同じ動作になります。
しかし、実際には必要なデータが取得できていないため、その後の処理において結果が異常に なる場合があります。

protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
  BufferedReader br = request.getReader();
  while((line = br.readLine()) != null){
   ・・・
  }
  ・・・
}

対処方法

パッチの公開時期は現在検討中です。急ぎでパッチが必要な場合はご連絡ください。


回避方法

HttpServletRequestのgetInputStream メソッドで取得したServletInputStreamを利用して リクエストデータを取得すると正常に処理できます。

protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
  ServletInputStream sis = request.getInputStream();
  byte[] b = new byte[・・・
  int size = 0;
  while((size = sis.read(b)) > -1){
   ・・・
  }
  ・・・
}

更新履歴

2016/10/19 初版

製品名カテゴリ

WebOTX
WebOTX Application Server

  • コンテンツID: 3010101917
  • 公開日: 2016年10月19日
  • 最終更新日:2016年10月19日
ここからページ共通メニューです。 ページ共通メニューを読み飛ばす。