Как работать с кодировкой gzip в ZuulFilter - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть ZuulFilter, который после проксирования слегка меняет отклик.Это работает, как и ожидалось для стандартного случая

@Component
public class ResponseEnhancerFilter extends ZuulFilter {

    @Autowired
    private ObjectMapper objectMapper;

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

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

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

    @Override
    public Object run() throws ZuulException {
        RequestContext ctx = RequestContext.getCurrentContext();
        try (final InputStream is = ctx.getResponseDataStream()) {
            String response = StreamUtils.copyToString(is, getEncoding(ctx));
            ctx.setResponseBody(response.replaceAll("regex", "replacement"));
        } catch (IOException e) {
        }
        return null;
    }

    private Charset getEncoding(RequestContext ctx) {
        return Optional.ofNullable(ctx.getResponse().getCharacterEncoding())
                .map(Charset::forName)
                .orElse(Charsets.UTF_8);
    }
}

Но когда ответ от сервера, ответ на который возвращается, возвращает ответ gzipped в getResponseDataStream, я получаю сообщение gzipped и, конечно, замена не работает.

Я вижу, что есть два метода в контексте, которые включают gzip: getResponseGZipped и isGzipRequested

Существуют ли какие-либо стандартные подходы для обработки такого типа фильтра в zuul?

...