【发布时间】:2022-01-06 17:16:47
【问题描述】:
在我们的应用程序中,我必须编写一个过滤器,它将读取包含 xml 作为正文的 HttpServletRequest。我已经阅读了 xml,现在我想从 xml 中删除一个特定的标签,因为它是 base64 编码的内容,并且在处理时占用了大量内存。阅读请求后,我已从 xml 中删除了标签。现在我希望这个新的 xml 字符串再次添加到 HttpServletRequest 中,以便可以进一步处理它。 我无法弄清楚如何将新字符串作为正文而不是作为参数添加回 HttpServletRequest。我不是在寻找 Interceptor 解决方案,因为我在转换中遇到了 Interceptor 的另一个问题。
下面是我的过滤器:
@Component
public class UploadDocumentFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
InputStream stream = request.getInputStream();
for (int length; (length = stream.read(buffer)) != -1;) {
result.write(buffer, 0, length);
} // StandardCharsets.UTF_8.name() > JDK 7 String test=
String test=result.toString("UTF-8");
//TODO add back this string back to HttpServletRequest
chain.doFilter(request, response);
}
@Override
public void destroy() { // TODO Auto-generated method stub
}
}
【问题讨论】:
标签: java xml spring spring-boot