2011-12-05 6 views
1

Grizzlyサーブレットコンテナ(2.1.7)が組み込まれたMilton WebDAVサーバー(1.6.8)を使用しています。デフォルト設定では、少なくともCyber​​duck発行のPUT要求は機能しません。私はこの問題を、HTTP 100 Continueの処理方法(Jettyにも影響するように思われます)の問題に追い込んでいます。Milton mailing listbug trackerのメッセージは、「transparent expect」で賢明にしようとしているサーブレットコンテナの障害です/処理を続ける "。HTTP 100を取得する方法組み込みのGrizzlyでWebDAVの作業を継続しますか?

はい、透過的に処理するコンテナは、WebdavのHTTPセキュリティを効果的に中断し続けます。 HTTPはチャレンジ/レスポンスセキュリティモデルを使用しており、多くのクライアントがそれに依存しています。つまり、PUTを実行すると、認証されていないPUTを実行し、ファイルがアップロードされる前にExpectContinueを使用してチャレンジが発行されるようにします。

しかし、ExpectContinueを透過的に処理すると、ファイル全体がアップロードされてから、milton APIが現在のユーザーが認証され、アクションを実行する権限があるかどうかを確認できます。

サポート対象のクライアントに応じて、これは完全に受け入れられないか、迷惑であるか、問題ではありません。

しかし、一般的には、Grizzlyの透過的な処理を無効にしてから、miltonのサポートを再度有効にすることを試みるべきだと思います。

Grizzlyの透過的な期待/継続処理を無効にするにはどうすればよいですか?これは本当に正しいアプローチですか?代替案は、Miltonのexpect/continue処理を無効にすることですが、WebDAV認証を破るようです。

アップデート:私も突堤を試してみましたが、今(8.1.0.RC1)、そしてそれはグリズリーと同じ挙動を示す:取扱いは、私はそれがないデフォルトの設定で、ファイルを置くことができますオフになっていき/期待するだけで作業。

答えて

0

transparent expect-continue処理が問題になるかどうかは、ターゲットクライアントアプリケーションがexpect-continue認証を使用するかどうかによって異なります。

これについてはまだ詳細を調査していないので、どのコンテナが透過的な処理を行い、無効にすることができるかどうか、またはクライアントアプリケーションが要求するものについては確実には言えません。

GrizzlyまたはTomcatの誰かが、コンテナの取り扱いを無効にするオプションについてコメントしてもよいかもしれません。 Grizly 2.xではについて

+0

ミルトンの「リファレンスコンテナ」は、expect-continueがすぐに使えるものですか?私はそれを動作させることができない場合、私はグリズリーを使用する必要はありません。 – Thilo

1

、次のようなあなたのServletHandlersendAcknowledgmentメソッドをオーバーライドする必要があります。

class MyServletHandler extends ServletHandler 
{ 
    protected boolean sendAcknowledgment(final Request request, 
     final Response response) 
     throws IOException 
    { 
     if (authClient(request, response) 
     { 
      return super.sendAcknowledgment(request, response); 
     } 
     else 
     { 
      response.setStatus(HttpStatus.EXPECTATION_FAILED_417); 
      return false; 
     } 
    } 
} 

はそれに役立つことを願っています。

+0

それを試したが、うまくいかなかった。ブレークポイントを入れても、そこには行きませんでした。誰が 'sendAcknowledgement'をいつ呼び出すのですか?私が見ることのできるところから、MiltonはステータスコードをSC_CONTINUEに設定し、要求処理を終了します。 – Thilo

+0

は明日を深く掘り下げますが、今のところ 'sendAcknowledgement'はServletHandlerではなくHttpHandlerChainで呼び出されるようです。 – Thilo

+0

pls。最新のGrizzly 2.1.8を試してください012 – alexey