我正在使用ClientHttpRequestInterceptor为我的Android项目中的RestTemplate发出的每个请求添加一个Basic Authorization标头。 我也通过将Content-Encoding标头设置为“gzip”来压缩请求体 将Interceptor添加到RestTemplate会导致request.execute方法被调用两次;压缩身体两次。
拦截器:
public class BasicAuthRequestInterceptor implements ClientHttpRequestInterceptor {
/** The base64 encoded credentials */
private final String encodedCredentials;
public BasicAuthRequestInterceptor(final String username, final String password) {
this.encodedCredentials = new String(Base64.encodeBytes((username + ":" + password).getBytes()));
}
@Override
public ClientHttpResponse intercept(final HttpRequest request, final byte[] body,
final ClientHttpRequestExecution execution) throws IOException {
HttpHeaders headers = request.getHeaders();
headers.add("Authorization", "Basic " + this.encodedCredentials);
return execution.execute(request, body);
}
}
RestTemplate设置:
// Create a new rest template
final RestTemplate restTemplate = new RestTemplate(requestFactory);
// Add authorisation interceptor
final List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
interceptors.add(new BasicAuthRequestInterceptor(HTTP_AUTH_USERNAME, HTTP_AUTH_PASSWORD));
restTemplate.setInterceptors(interceptors);
我不认为这是预期的行为,我没有发现其他人报告此问题,因此我的拦截器实现有问题吗? 我可以通过在我设置Authorization标头的位置设置Content-Encoding标头来解决此问题,但这是不可取的
这是使用spring-android-rest-template依赖的版本1.0.1.RELEASE。