2011-02-10 14 views
1

現在、Jerseyライブラリを使用してJavaでRESTful Webサービスを開発中です。Java WebサービスHttpServletRequestWrapper問題:IllegalStateException

セキュリティ上の理由から、Amazons Simple Storage Serviceに似たカスタム認証が必要です。しかし、これは、身体のMD5ハッシュを計算して(もしあれば)、要求を認証する必要があります。

これまでのところ、私はカスタムオーセンティケータとレルムを使用し、それらを自分のコンテキストに接続しました。 ハッシュを計算しようとすると、本体が一度しか読み取れないため、最初に要求自体を使用してIllegalStateExceptionが発生しました。

問題を調査した後、私はHttpServletRequestWrapper内でリクエストをラップしようとしましたが、これまで成功していませんでした。私の領域内 http://forums.oracle.com/forums/thread.jspa?threadID=2156814&tstart=0

、私は認証を行う場所、私が最初にそうようにラッパーを作成しています:その後、

MyRequestWrapper requestWrapper = new MyRequestWrapper(request); 

私は

私は基本的にここに示すようなラッパーを使用していますrequestWrapper を使用してMD5を計算し、最終的に

request.getRequestDispatcher("/*").forward(requestWrapper, response); 

proceそれを転送していますssingが正常に動作しますが、私はその後、このようなエラーが表示されます。(私はラッパーですべてを使用せずに得たように)前に呼び出されるgetReaderまたはのgetInputStreamのない言及がない

Servlet.service() for servlet Jersey REST Service threw exception 
java.lang.IllegalStateException 
    at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407) 
    at com.sun.jersey.spi.container.servlet.WebComponent$Writer.finish(WebComponent.java:285) 
    at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:241) 

注こと。

今、私は私がここで何か間違ったことをやっている確信しているが、私は本当にこのことについて多くを知らないと、誰かがここで私を助けることができれば、本当に喜んでいるだろう:)

よろしく、 ルーカス

+0

例外に*原因*が記録されていますか? –

+0

私は、あなたがjava.lang.IllegalStateExceptionの後で通常どんなものになるかを意味すると思います。そして、いいえ、それはIllegalStateExceptionの後に原因がなければそのように見えます。 – Luksurious

+0

処理中の任意の時点でレスポンス出力ストリームに直接アクセスしていますか? –

答えて

1

私の質問に私のコメントで述べたとおり:

私は要求からgetReader()にアクセスしていました。レスポンス私は触れなかった。しかし、問題がラッパーを転送していることがわかりました。私は明示的にこれを私の質問で述べていませんでしたが、私はTomcatを使用していて、バルブ内で上記のコードを使用しようとしました。私はこれがバルブからも可能であるかどうかという質問にまだ興味があります。なぜなら、これはtomcatモデルに適しているからです。私は今ではそれほどうまくないフィルターを使用するように移動しましたが、動作は

ですが、このソリューションはtomcatバルブの代わりにかなり使いやすいとわかりました。