我目前正在使用Jersey庫開發Java中的RESTful Web服務。Java Web服務HttpServletRequestWrapper問題:IllegalStateException
出於安全原因,我們需要一種類似於亞馬遜簡單存儲服務的定製認證。然而,這需要我計算身體的MD5散列(如果有的話)來驗證請求。
到目前爲止,我已經使用了一個自定義的Authenticator和Realm,並將它們插入到我的上下文中。 一旦嘗試計算散列,我首先使用請求本身導致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);
的凝固酶原ssing工作正常,但我之後獲得類似這樣的錯誤:
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)
注意,不存在getReader或的getInputStream的提之前被調用(比如我不使用任何包裝的話)。
現在我相信我在這裏做一些錯誤的,但我真的不知道很多關於這一點,將是非常高興,如果有人可以幫助我在這裏:)
最好的問候, 盧卡斯
該異常是否有*原因*記錄? – 2011-02-10 18:39:56