我目前正在使用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