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