我有自定义过滤器,我想从请求中记录正文。但是当我使用ContentCachingRequestWrapper并尝试调用时,getContentAsByteArray()我总是得到一个空数组。
@Component
public class CustomFilter implements Filter {
private final Logger log = LoggerFactory.getLogger(CustomFilter.class);
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest requestToCache = new ContentCachingRequestWrapper(request);
chain.doFilter(req, res);
log.info(getRequestData(requestToCache));
}
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void destroy() {
}
public static String getRequestData(final HttpServletRequest request) throws UnsupportedEncodingException {
String payload = null;
ContentCachingRequestWrapper wrapper = WebUtils.getNativeRequest(request, ContentCachingRequestWrapper.class);
if (wrapper != null) {
byte[] buf = wrapper.getContentAsByteArray();
if (buf.length > 0) {
payload = new String(buf, 0, buf.length, wrapper.getCharacterEncoding());
}
}
return payload;
}
}
我也尝试过 create Interceptor,但遇到了同样的问题。我究竟做错了什么?感谢帮助。
拉丁的传说
扬帆大鱼
一只萌萌小番薯
随时随地看视频慕课网APP
相关分类