【问题标题】:Writing the payload back to HTTPRequest object in Java Filter after changing some value in the payload更改有效负载中的某些值后,将有效负载写回 Java 过滤器中的 HTTPRequest 对象
【发布时间】: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


    【解决方案1】:

    你试过 javax.servlet.ServletRequestWrapper 吗?

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    • @Isakots:我没有找到使用 ServletRequestWrapper 写回 httpRequest 的代码。
    猜你喜欢
    • 2021-10-29
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多