Commit 8ccd4db5 authored by Phillip Webb's avatar Phillip Webb

Merge branch '1.4.x' into 1.5.x

parents b4b83706 73201198
/* /*
* Copyright 2012-2015 the original author or authors. * Copyright 2012-2017 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -19,6 +19,7 @@ package org.springframework.boot.actuate.autoconfigure; ...@@ -19,6 +19,7 @@ package org.springframework.boot.actuate.autoconfigure;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.BeanClassLoaderAware;
import org.springframework.context.annotation.DeferredImportSelector; import org.springframework.context.annotation.DeferredImportSelector;
...@@ -27,6 +28,7 @@ import org.springframework.core.annotation.AnnotationAwareOrderComparator; ...@@ -27,6 +28,7 @@ import org.springframework.core.annotation.AnnotationAwareOrderComparator;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.core.io.support.SpringFactoriesLoader; import org.springframework.core.io.support.SpringFactoriesLoader;
import org.springframework.core.type.AnnotationMetadata; import org.springframework.core.type.AnnotationMetadata;
import org.springframework.util.ClassUtils;
/** /**
* Selects configuration classes for the management context configuration. Entries are * Selects configuration classes for the management context configuration. Entries are
...@@ -47,11 +49,26 @@ class ManagementContextConfigurationsImportSelector ...@@ -47,11 +49,26 @@ class ManagementContextConfigurationsImportSelector
@Override @Override
public String[] selectImports(AnnotationMetadata metadata) { public String[] selectImports(AnnotationMetadata metadata) {
// Find all possible auto configuration classes, filtering duplicates // Find all possible auto configuration classes, filtering duplicates
List<String> factories = new ArrayList<String>( List<String> names = loadFactoryNames();
new LinkedHashSet<String>(SpringFactoriesLoader.loadFactoryNames( Set<Class<?>> classes = new LinkedHashSet<Class<?>>();
ManagementContextConfiguration.class, this.classLoader))); for (String factoryName : names) {
AnnotationAwareOrderComparator.sort(factories); classes.add(ClassUtils.resolveClassName(factoryName, this.classLoader));
return factories.toArray(new String[0]); }
return getSortedClassNames(new ArrayList<Class<?>>(classes));
}
protected List<String> loadFactoryNames() {
return SpringFactoriesLoader
.loadFactoryNames(ManagementContextConfiguration.class, this.classLoader);
}
private String[] getSortedClassNames(List<Class<?>> classes) {
AnnotationAwareOrderComparator.sort(classes);
List<String> names = new ArrayList<String>();
for (Class<?> sourceClass : classes) {
names.add(sourceClass.getName());
}
return names.toArray(new String[names.size()]);
} }
@Override @Override
......
/*
* 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.boot.actuate.autoconfigure;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import org.springframework.core.annotation.Order;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link ManagementContextConfigurationsImportSelector}.
*
* @author Phillip Webb
*/
public class ManagementContextConfigurationsImportSelectorTests {
@Test
public void selectImportsShouldOrderResult() throws Exception {
String[] imports = new TestManagementContextConfigurationsImportSelector()
.selectImports(null);
assertThat(imports).containsExactly(A.class.getName(), B.class.getName(),
C.class.getName());
}
private static class TestManagementContextConfigurationsImportSelector
extends ManagementContextConfigurationsImportSelector {
@Override
protected List<String> loadFactoryNames() {
return Arrays.asList(C.class.getName(), A.class.getName(), B.class.getName());
}
}
@Order(1)
private static class A {
}
@Order(2)
private static class B {
}
@Order(3)
private static class C {
}
}
/* /*
* 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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -48,7 +48,6 @@ import org.springframework.http.ResponseEntity; ...@@ -48,7 +48,6 @@ import org.springframework.http.ResponseEntity;
import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse; import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.client.InterceptingClientHttpRequestFactory;
import org.springframework.http.client.support.BasicAuthorizationInterceptor; import org.springframework.http.client.support.BasicAuthorizationInterceptor;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.ClassUtils; import org.springframework.util.ClassUtils;
...@@ -144,11 +143,19 @@ public class TestRestTemplate { ...@@ -144,11 +143,19 @@ public class TestRestTemplate {
if (username == null) { if (username == null) {
return; return;
} }
List<ClientHttpRequestInterceptor> interceptors = Collections List<ClientHttpRequestInterceptor> interceptors = restTemplate.getInterceptors();
.<ClientHttpRequestInterceptor>singletonList( if (interceptors == null) {
new BasicAuthorizationInterceptor(username, password)); interceptors = Collections.emptyList();
restTemplate.setRequestFactory(new InterceptingClientHttpRequestFactory( }
restTemplate.getRequestFactory(), interceptors)); 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 { ...@@ -985,8 +992,7 @@ public class TestRestTemplate {
public TestRestTemplate withBasicAuth(String username, String password) { public TestRestTemplate withBasicAuth(String username, String password) {
RestTemplate restTemplate = new RestTemplate(); RestTemplate restTemplate = new RestTemplate();
restTemplate.setMessageConverters(getRestTemplate().getMessageConverters()); restTemplate.setMessageConverters(getRestTemplate().getMessageConverters());
restTemplate.setInterceptors( restTemplate.setInterceptors(getRestTemplate().getInterceptors());
removeBasicAuthInterceptorIfPresent(getRestTemplate().getInterceptors()));
restTemplate.setRequestFactory(getRestTemplate().getRequestFactory()); restTemplate.setRequestFactory(getRestTemplate().getRequestFactory());
restTemplate.setUriTemplateHandler(getRestTemplate().getUriTemplateHandler()); restTemplate.setUriTemplateHandler(getRestTemplate().getUriTemplateHandler());
TestRestTemplate testRestTemplate = new TestRestTemplate(restTemplate, username, TestRestTemplate testRestTemplate = new TestRestTemplate(restTemplate, username,
...@@ -996,19 +1002,6 @@ public class TestRestTemplate { ...@@ -996,19 +1002,6 @@ public class TestRestTemplate {
return 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. * Options used to customize the Apache Http Client if it is used.
*/ */
......
/* /*
* 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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -160,16 +160,15 @@ public class TestRestTemplateTests { ...@@ -160,16 +160,15 @@ public class TestRestTemplateTests {
.isInstanceOf(CustomHttpComponentsClientHttpRequestFactory.class); .isInstanceOf(CustomHttpComponentsClientHttpRequestFactory.class);
assertThat(basicAuthTemplate.getRestTemplate().getUriTemplateHandler()) assertThat(basicAuthTemplate.getRestTemplate().getUriTemplateHandler())
.isSameAs(originalTemplate.getRestTemplate().getUriTemplateHandler()); .isSameAs(originalTemplate.getRestTemplate().getUriTemplateHandler());
assertThat(basicAuthTemplate.getRestTemplate().getInterceptors()) assertThat(basicAuthTemplate.getRestTemplate().getInterceptors()).hasSize(1);
.containsExactlyElementsOf(
originalTemplate.getRestTemplate().getInterceptors());
assertBasicAuthorizationInterceptorCredentials(basicAuthTemplate, "user", assertBasicAuthorizationInterceptorCredentials(basicAuthTemplate, "user",
"password"); "password");
} }
@Test @Test
public void withBasicAuthReplacesBasicAuthInterceptorWhenAlreadyPresent() { public void withBasicAuthReplacesBasicAuthInterceptorWhenAlreadyPresent() {
TestRestTemplate original = new TestRestTemplate("foo", "bar"); TestRestTemplate original = new TestRestTemplate("foo", "bar")
.withBasicAuth("replace", "repalce");
TestRestTemplate basicAuth = original.withBasicAuth("user", "password"); TestRestTemplate basicAuth = original.withBasicAuth("user", "password");
assertThat(basicAuth.getRestTemplate().getMessageConverters()) assertThat(basicAuth.getRestTemplate().getMessageConverters())
.containsExactlyElementsOf( .containsExactlyElementsOf(
...@@ -181,8 +180,7 @@ public class TestRestTemplateTests { ...@@ -181,8 +180,7 @@ public class TestRestTemplateTests {
.isInstanceOf(CustomHttpComponentsClientHttpRequestFactory.class); .isInstanceOf(CustomHttpComponentsClientHttpRequestFactory.class);
assertThat(basicAuth.getRestTemplate().getUriTemplateHandler()) assertThat(basicAuth.getRestTemplate().getUriTemplateHandler())
.isSameAs(original.getRestTemplate().getUriTemplateHandler()); .isSameAs(original.getRestTemplate().getUriTemplateHandler());
assertThat(basicAuth.getRestTemplate().getInterceptors()) assertThat(basicAuth.getRestTemplate().getInterceptors()).hasSize(1);
.containsExactlyElementsOf(original.getRestTemplate().getInterceptors());
assertBasicAuthorizationInterceptorCredentials(basicAuth, "user", "password"); assertBasicAuthorizationInterceptorCredentials(basicAuth, "user", "password");
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment