1

我遇到了这里描述的问题,但我不清楚如何解决它。

问题是我有一个 AuthenticationProvider 必须读取请求的正文。但是,当我的控制器方法想要通过 @RequestMapping 使用该数据时,它是空的,因为 Provider 已经读取了 inputStream。

有没有办法从支持标记/重置的 Request 获取 inputReader,以便我的提供者可以在进行身份验证后简单地将流回滚到其初始状态?过滤器的默认行为是对请求对象的破坏性修改,这似乎很疯狂。

4

1 回答 1

4

Provider 应该只在特定情况下被触发,所以它不应该影响你的整个应用程序。但是,如果您需要提供者处理的请求中的正文,那么您仍然有一个解决方法:

  1. 实现一个servletFilter
  2. 包装请求
  3. 在包装器中缓存请求正文,然后覆盖该getInputStream()方法以返回ByteArrayInputStream带有缓存的请求正文。这样它就可以被读取多次。

springAbstractRequestLoggingFilter做了类似的事情并且有一个示例包装器,你可以检查它。

于 2012-08-06T18:08:47.680 回答