当前位置: 首页 > 面试题库 >

如何在Zuul帖子过滤器中获取响应正文?

单修德
2023-03-14
问题内容

使用Zuul作为post过滤器的代理时,如何读取响应正文?

我试图像这样调用代码:

@Component
public class PostFilter extends ZuulFilter {

    private static final Logger log = LoggerFactory.getLogger(PostFilter.class);

    @Override
    public String filterType() {
        return "post";
    }

    @Override
    public int filterOrder() {
        return 2000;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        ctx.getResponseBody(); // null

        // cant't do this, cause input stream is used later in other filters and I got InputStream Closed exception
        // GZIPInputStream gzipInputStream = new GZIPInputStream(stream);
        return null;
    }

}

问题答案:

我设法克服了这一点。该解决方案包括4个步骤:

  1. ctx.getResponseDataStream()入ByteArrayOutputStream
  2. 将OutputStream复制到2 InputStreams。
  3. 使用其中之一进行自定义。
  4. 使用第二个重新分配上下文: context.setResponseBody(inputStream)
    • 从点1读取流将导致无法再次读取该流,因此,您将传递尚未读取的新的新鲜流


 类似资料:
  • 我试图在我的应用程序中获取一些数据,并通过使用带有截击的HTTP POST请求向用户显示。我的问题是,我不知道如何获得服务器主体对请求的响应。在下面的代码中,响应总是“200”,这是HTTP状态代码。 如何提取身体反应并作为字符串进行管理?

  • 我有一个核心MS,它只是一个通过,并为所有传入请求添加头。我试图在Zuul过滤器中调用一个Validate Session API,以便在为所有请求添加报头之前首先调用它,如果出错,事务将不会继续。然而,似乎我无法在过滤器中发送基本的rest模板请求。那我是做错了什么,还是错过了别的什么?。这是代码片段。 resttemplate部分给出了FF。错误。然而,移除它将使应用程序正常工作,然而,我需要

  • 问题内容: 有没有办法只处理过滤器中的响应。 下面编写的代码是否正确? 问题答案: 这取决于您想要什么。通常,您的样本虽然不正确。之后chain.doFilter又回来了,这是来不及做的任何回应。此时,整个响应已发送到客户端,您的代码无法访问它。 您需要做的是包装request和/或包装response到您自己的类中,将这些包装传递给doFilter方法,并处理包装中的所有处理。 为了使其更容易,

  • 问题内容: 我定义了一个,并且具有带有Spring注释的Java类。 我想将Bean 放入我的,因此尝试了以下操作: 但是它总是返回。我怎样才能得到一个Spring bean? 问题答案: 尝试: 你的bean在应用程序上下文中的名称/标识在哪里。甚至更好: 还可以看看GenericFilterBean及其子类。

  • 我必须从自定义帖子类型返回所有帖子,由'start_date'从'ACF字段'。 我有一些有日期的帖子,还有一些没有日期的帖子。当我添加“orderby”时= 这是我的代码: 如果我删掉 我所有的帖子都被退回,但它们不是按开始日期排序的 有什么想法吗? 谢谢。

  • 我需要在每个响应中添加标题。我正打算在下面做 我想在之后这样做,以便一旦控制器处理它,我只是在返回客户端之前添加标头。是正确的吗? 但如何编写响应过滤器? 在已返回,对响应执行任何操作都为时已晚。此时,整个响应已经发送到客户端,您的代码无法访问它。 我觉得上面的说法不对。我不能在过滤链之后添加标题。doFilter(请求、响应)?如果不是,为什么? 我使用的是spring mvc。