package com.netflix.eureka.transport; import com.netflix.eureka.EurekaServerConfig; import javax.ws.rs.client.ClientRequestContext; import javax.ws.rs.client.ClientRequestFilter; import javax.ws.rs.client.ClientResponseContext; import javax.ws.rs.client.ClientResponseFilter; import javax.ws.rs.core.HttpHeaders; import java.io.IOException; public class Jersey2DynamicGZIPContentEncodingFilter implements ClientRequestFilter, ClientResponseFilter { private final EurekaServerConfig config; public Jersey2DynamicGZIPContentEncodingFilter(EurekaServerConfig config) { this.config = config; } @Override public void filter(ClientRequestContext requestContext) throws IOException { if (!requestContext.getHeaders().containsKey(HttpHeaders.ACCEPT_ENCODING)) { requestContext.getHeaders().add(HttpHeaders.ACCEPT_ENCODING, "gzip"); } if (hasEntity(requestContext) && isCompressionEnabled()) { Object contentEncoding = requestContext.getHeaders().getFirst(HttpHeaders.CONTENT_ENCODING); if (!"gzip".equals(contentEncoding)) { requestContext.getHeaders().add(HttpHeaders.CONTENT_ENCODING, "gzip"); } } } @Override public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException { Object contentEncoding = responseContext.getHeaders().getFirst(HttpHeaders.CONTENT_ENCODING); if ("gzip".equals(contentEncoding)) { responseContext.getHeaders().remove(HttpHeaders.CONTENT_ENCODING); } } private boolean hasEntity(ClientRequestContext requestContext) { return false; } private boolean isCompressionEnabled() { return config.shouldEnableReplicatedRequestCompression(); } }