gpt4 book ai didi

Java Web 服务 HttpServletRequestWrapper 问题 : IllegalStateException

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:20:12 24 4
gpt4 key购买 nike

我目前正在使用 Jersey 库在 Java 中开发 RESTful Web 服务。

出于安全原因,我们需要类似于 Amazon 的简单存储服务的自定义身份验证。但是,这需要我计算正文(如果有的话)的 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);

处理工作正常,但之后出现这样的错误:

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(就像我根本没有使用任何包装器一样)。

现在我确定我在这里做错了什么,但我对此真的不太了解,如果有人能在这里帮助我,我会很高兴:)

最好的问候,卢卡斯

最佳答案

正如我在对我的问题的评论中所述:

I was accessing getReader() from the request. Response I did not touch. However I found that the problem was forwarding the wrapper. I didn't explicitly state this in my question but I am using tomcat and tried to use the above code inside a valve. I am still interested in the question if this is also possible from a valve, since this fits better into the tomcat model. I have now moved to using a filter which is not so nice, but works

但是我发现这个解决方案非常好(使用过滤器)而不是 tomcat 阀。

关于Java Web 服务 HttpServletRequestWrapper 问题 : IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4960791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com