0
一个非常简单的用例:无法访问请求负载在弹簧过滤器,当请求类型是WWW的形式,进行了urlencoded
class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) {
String body = IOUtils.toString(req.getInputStream());
// body is a always empty
}
}
当我送与内容类型application/json
的请求,我得到的实际有效载荷。但是当我将它作为x-www-form-urlencoded
发送时,我不会收到任何数据。我假设其中一个弹簧过滤器已经在使用这些数据,并且我的过滤器没有任何问题。
请注意,这个问题与我们只能读取一次数据流无关。我已经想出了这部分,我正在创建另一个HttpServletRequest
,其中包含其他过滤器的缓冲输入流。问题是Spring Boot中的其他内容正在读取我的所有数据,而没有任何数据。
我只是想要一种方式来获得有效载荷。它不一定来自InputStream
,如果春天可以给我有效载荷作为byte[]
,它将符合我的目的。
我正在使用Spring Boot 1.3.5。
什么是实现这种过滤器的原因? – RMachnik
因此,我公开了在某些警报情况下触发的LogEntries webhook。 https://logentries.com/doc/webhookalert/。但是,他们设置了使用有效负载计算的授权令牌,我需要访问它才能在我身边进行计算并验证请求是否合法。 –
你的使用案例类似于:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/filter/AbstractRequestLoggingFilter.html更精确的看你应该仔细看第277行https://github.com/spring-projects/spring-framework/blob/master/spring-web/src/main/java/org/springframework/web/filter/AbstractRequestLoggingFilter.java – RMachnik