Fix TestRestTemplate.withBasicAuth interceptors
Update `TestRestTemplate` to handle `BasicAuthorizationInterceptor`s correctly. Prior to this commit the `BasicAuthorizationInterceptor` was added directly to the `ClientHttpRequestFactory` rather than to the `RestTemplate`. This meant that it could not easily be removed when `TestRestTemplate.withBasicAuth` was invoked. The `TestRestTemplate` now sets the interceptor on `RestTemplate` directly and relies on the logic in `InterceptingHttpAccessor` to add it to the `ClientHttpRequestFactory`. Fixes gh-7812
This commit is contained in:
parent
9ccf47398e
commit
556ce14f2d
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2016 the original author or authors.
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -48,7 +48,6 @@ import org.springframework.http.ResponseEntity;
|
|||
import org.springframework.http.client.ClientHttpRequestInterceptor;
|
||||
import org.springframework.http.client.ClientHttpResponse;
|
||||
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
||||
import org.springframework.http.client.InterceptingClientHttpRequestFactory;
|
||||
import org.springframework.http.client.support.BasicAuthorizationInterceptor;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
|
@ -144,11 +143,19 @@ public class TestRestTemplate {
|
|||
if (username == null) {
|
||||
return;
|
||||
}
|
||||
List<ClientHttpRequestInterceptor> interceptors = Collections
|
||||
.<ClientHttpRequestInterceptor>singletonList(
|
||||
new BasicAuthorizationInterceptor(username, password));
|
||||
restTemplate.setRequestFactory(new InterceptingClientHttpRequestFactory(
|
||||
restTemplate.getRequestFactory(), interceptors));
|
||||
List<ClientHttpRequestInterceptor> interceptors = restTemplate.getInterceptors();
|
||||
if (interceptors == null) {
|
||||
interceptors = Collections.emptyList();
|
||||
}
|
||||
interceptors = new ArrayList<ClientHttpRequestInterceptor>(interceptors);
|
||||
Iterator<ClientHttpRequestInterceptor> iterator = interceptors.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
if (iterator.next() instanceof BasicAuthorizationInterceptor) {
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
interceptors.add(new BasicAuthorizationInterceptor(username, password));
|
||||
restTemplate.setInterceptors(interceptors);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -985,8 +992,7 @@ public class TestRestTemplate {
|
|||
public TestRestTemplate withBasicAuth(String username, String password) {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
restTemplate.setMessageConverters(getRestTemplate().getMessageConverters());
|
||||
restTemplate.setInterceptors(
|
||||
removeBasicAuthInterceptorIfPresent(getRestTemplate().getInterceptors()));
|
||||
restTemplate.setInterceptors(getRestTemplate().getInterceptors());
|
||||
restTemplate.setRequestFactory(getRestTemplate().getRequestFactory());
|
||||
restTemplate.setUriTemplateHandler(getRestTemplate().getUriTemplateHandler());
|
||||
TestRestTemplate testRestTemplate = new TestRestTemplate(restTemplate, username,
|
||||
|
|
@ -996,19 +1002,6 @@ public class TestRestTemplate {
|
|||
return testRestTemplate;
|
||||
}
|
||||
|
||||
private List<ClientHttpRequestInterceptor> removeBasicAuthInterceptorIfPresent(
|
||||
List<ClientHttpRequestInterceptor> interceptors) {
|
||||
List<ClientHttpRequestInterceptor> updatedInterceptors = new ArrayList<ClientHttpRequestInterceptor>(
|
||||
interceptors);
|
||||
Iterator<ClientHttpRequestInterceptor> iterator = updatedInterceptors.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
if (iterator.next() instanceof BasicAuthorizationInterceptor) {
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
return interceptors;
|
||||
}
|
||||
|
||||
/**
|
||||
* Options used to customize the Apache Http Client if it is used.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2016 the original author or authors.
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -160,16 +160,15 @@ public class TestRestTemplateTests {
|
|||
.isInstanceOf(CustomHttpComponentsClientHttpRequestFactory.class);
|
||||
assertThat(basicAuthTemplate.getRestTemplate().getUriTemplateHandler())
|
||||
.isSameAs(originalTemplate.getRestTemplate().getUriTemplateHandler());
|
||||
assertThat(basicAuthTemplate.getRestTemplate().getInterceptors())
|
||||
.containsExactlyElementsOf(
|
||||
originalTemplate.getRestTemplate().getInterceptors());
|
||||
assertThat(basicAuthTemplate.getRestTemplate().getInterceptors()).hasSize(1);
|
||||
assertBasicAuthorizationInterceptorCredentials(basicAuthTemplate, "user",
|
||||
"password");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void withBasicAuthReplacesBasicAuthInterceptorWhenAlreadyPresent() {
|
||||
TestRestTemplate original = new TestRestTemplate("foo", "bar");
|
||||
TestRestTemplate original = new TestRestTemplate("foo", "bar")
|
||||
.withBasicAuth("replace", "repalce");
|
||||
TestRestTemplate basicAuth = original.withBasicAuth("user", "password");
|
||||
assertThat(basicAuth.getRestTemplate().getMessageConverters())
|
||||
.containsExactlyElementsOf(
|
||||
|
|
@ -181,8 +180,7 @@ public class TestRestTemplateTests {
|
|||
.isInstanceOf(CustomHttpComponentsClientHttpRequestFactory.class);
|
||||
assertThat(basicAuth.getRestTemplate().getUriTemplateHandler())
|
||||
.isSameAs(original.getRestTemplate().getUriTemplateHandler());
|
||||
assertThat(basicAuth.getRestTemplate().getInterceptors())
|
||||
.containsExactlyElementsOf(original.getRestTemplate().getInterceptors());
|
||||
assertThat(basicAuth.getRestTemplate().getInterceptors()).hasSize(1);
|
||||
assertBasicAuthorizationInterceptorCredentials(basicAuth, "user", "password");
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue