How to get response body in Zuul post filter?

前端 未结 6 1252
时光说笑
时光说笑 2021-01-04 06:55

How it is possible to read a response body while using Zuul as a proxy in post filter?

I am trying to call the code like this:

@Componen         


        
6条回答
  •  萌比男神i
    2021-01-04 07:44

    None of the answers worked for me. 1) Order of the filter needs to be lower that 1000 (sending response filter)

    2) Code:

     private String getResponseData(RequestContext ctx) throws IOException {
        String responseData = null;
    
        final InputStream responseDataStream = ctx.getResponseDataStream();
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ByteArrayOutputStream copy = new ByteArrayOutputStream();
        int read = 0;
        byte[] buff = new byte[1024];
        while ((read = responseDataStream.read(buff)) != -1) {
            bos.write(buff, 0, read);
            copy.write(buff, 0, read);
        }
        InputStream isFromFirstData = new ByteArrayInputStream(bos.toByteArray());
    
        boolean responseGZipped = ctx.getResponseGZipped();
        try {
            InputStream zin = null;
            if (responseGZipped) {
                zin = new GZIPInputStream(isFromFirstData);
            } else {
                zin = responseDataStream;
            }
            responseData = CharStreams.toString(new InputStreamReader(zin, "UTF-8"));
            ctx.setResponseDataStream(new ByteArrayInputStream(copy.toByteArray()));
    
        } catch (IOException e) {
            logger.warn("Error reading body {}", e.getMessage());
        }
    
        return responseData;
    }
    

提交回复
热议问题