java – 如何在Zuul post过滤器中获取响应体?

前端之家收集整理的这篇文章主要介绍了java – 如何在Zuul post过滤器中获取响应体?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在后置过滤器中使用Zuul作为代理时如何读取响应主体?

我试图像这样调用代码

  1. @Component
  2. public class PostFilter extends ZuulFilter {
  3.  
  4. private static final Logger log = LoggerFactory.getLogger(PostFilter.class);
  5.  
  6. @Override
  7. public String filterType() {
  8. return "post";
  9. }
  10.  
  11. @Override
  12. public int filterOrder() {
  13. return 2000;
  14. }
  15.  
  16. @Override
  17. public boolean shouldFilter() {
  18. return true;
  19. }
  20.  
  21. @Override
  22. public Object run() {
  23. RequestContext ctx = RequestContext.getCurrentContext();
  24. ctx.getResponseBody(); // null
  25.  
  26. // cant't do this,cause input stream is used later in other filters and I got InputStream Closed exception
  27. // GZIPInputStream gzipInputStream = new GZIPInputStream(stream);
  28. return null;
  29. }
  30.  
  31. }

解决方法

我成功克服了这一点.解决方包括4个步骤:

>将ctx.getResponseDataStream()读入ByteArrayOutputStream
>将OutputStream复制到2个InputStreams.
>使用其中一个用于自定义目的.
>使用第二个重新分配给上下文:context.setResponseBody(inputStream)

>从第1点读取流将导致无法再次读取流,因此这样您就传递了尚未读取的新流

猜你在找的Java相关文章