Move configuration of ConfigurationPropertiesReportEndpoint
See gh-10263
This commit is contained in:
@@ -20,6 +20,7 @@ import org.springframework.boot.actuate.autoconfigure.endpoint.condition.Conditi
|
||||
import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@@ -28,16 +29,30 @@ import org.springframework.context.annotation.Configuration;
|
||||
* {@link ConfigurationPropertiesReportEndpoint}.
|
||||
*
|
||||
* @author Phillip Webb
|
||||
* @author Stephane Nicoll
|
||||
* @since 2.0.0
|
||||
*/
|
||||
@Configuration
|
||||
@EnableConfigurationProperties(ConfigurationPropertiesReportEndpointProperties.class)
|
||||
public class ConfigurationPropertiesReportEndpointAutoConfiguration {
|
||||
|
||||
private final ConfigurationPropertiesReportEndpointProperties properties;
|
||||
|
||||
public ConfigurationPropertiesReportEndpointAutoConfiguration(
|
||||
ConfigurationPropertiesReportEndpointProperties properties) {
|
||||
this.properties = properties;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
@ConditionalOnEnabledEndpoint
|
||||
public ConfigurationPropertiesReportEndpoint configurationPropertiesReportEndpoint() {
|
||||
return new ConfigurationPropertiesReportEndpoint();
|
||||
ConfigurationPropertiesReportEndpoint endpoint = new ConfigurationPropertiesReportEndpoint();
|
||||
String[] keysToSanitize = this.properties.getKeysToSanitize();
|
||||
if (keysToSanitize != null) {
|
||||
endpoint.setKeysToSanitize(keysToSanitize);
|
||||
}
|
||||
return endpoint;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* 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.context.properties;
|
||||
|
||||
import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
|
||||
/**
|
||||
* Configuration properties for {@link ConfigurationPropertiesReportEndpoint}.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
* @since 2.0.0
|
||||
*/
|
||||
@ConfigurationProperties("endpoints.configprops")
|
||||
public class ConfigurationPropertiesReportEndpointProperties {
|
||||
|
||||
/**
|
||||
* Keys that should be sanitized. Keys can be simple strings that the property ends
|
||||
* with or regex expressions.
|
||||
*/
|
||||
private String[] keysToSanitize;
|
||||
|
||||
public String[] getKeysToSanitize() {
|
||||
return this.keysToSanitize;
|
||||
}
|
||||
|
||||
public void setKeysToSanitize(String[] keysToSanitize) {
|
||||
this.keysToSanitize = keysToSanitize;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,9 +1,6 @@
|
||||
{"properties": [
|
||||
{
|
||||
"name": "endpoints.configprops.keys-to-sanitize",
|
||||
"type": "java.lang.String[]",
|
||||
"sourceType": "org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint",
|
||||
"description": "Keys that should be sanitized. Keys can be simple strings that the property ends with or regex expressions.",
|
||||
"defaultValue": [
|
||||
"password",
|
||||
"secret",
|
||||
|
||||
@@ -16,11 +16,20 @@
|
||||
|
||||
package org.springframework.boot.actuate.autoconfigure.context.properties;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint;
|
||||
import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.boot.test.context.runner.ContextConsumer;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@@ -37,8 +46,8 @@ public class ConfigurationPropertiesReportEndpointAutoConfigurationTests {
|
||||
|
||||
@Test
|
||||
public void runShouldHaveEndpointBean() {
|
||||
this.contextRunner.run((context) -> assertThat(context)
|
||||
.hasSingleBean(ConfigurationPropertiesReportEndpoint.class));
|
||||
this.contextRunner.withUserConfiguration(Config.class)
|
||||
.run(validateTestProperties("******", "654321"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -49,4 +58,64 @@ public class ConfigurationPropertiesReportEndpointAutoConfigurationTests {
|
||||
.doesNotHaveBean(ConfigurationPropertiesReportEndpoint.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void keysToSanitizeCanBeConfiguredViaTheEnvironment() throws Exception {
|
||||
this.contextRunner.withUserConfiguration(Config.class)
|
||||
.withPropertyValues("endpoints.configprops.keys-to-sanitize: .*pass.*, property")
|
||||
.run(validateTestProperties("******", "******"));
|
||||
}
|
||||
|
||||
private ContextConsumer<AssertableApplicationContext> validateTestProperties(String dbPassword,
|
||||
String myTestProperty) {
|
||||
return context -> {
|
||||
assertThat(context).hasSingleBean(
|
||||
ConfigurationPropertiesReportEndpoint.class);
|
||||
ConfigurationPropertiesReportEndpoint endpoint = context
|
||||
.getBean(ConfigurationPropertiesReportEndpoint.class);
|
||||
ConfigurationPropertiesDescriptor properties = endpoint
|
||||
.configurationProperties();
|
||||
Map<String, Object> nestedProperties = properties.getBeans()
|
||||
.get("testProperties").getProperties();
|
||||
assertThat(nestedProperties).isNotNull();
|
||||
assertThat(nestedProperties.get("dbPassword")).isEqualTo(dbPassword);
|
||||
assertThat(nestedProperties.get("myTestProperty")).isEqualTo(myTestProperty);
|
||||
};
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@EnableConfigurationProperties
|
||||
public static class Config {
|
||||
|
||||
@Bean
|
||||
public TestProperties testProperties() {
|
||||
return new TestProperties();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ConfigurationProperties("test")
|
||||
private static class TestProperties {
|
||||
|
||||
private String dbPassword = "123456";
|
||||
|
||||
private String myTestProperty = "654321";
|
||||
|
||||
public String getDbPassword() {
|
||||
return this.dbPassword;
|
||||
}
|
||||
|
||||
public void setDbPassword(String dbPassword) {
|
||||
this.dbPassword = dbPassword;
|
||||
}
|
||||
|
||||
public String getMyTestProperty() {
|
||||
return this.myTestProperty;
|
||||
}
|
||||
|
||||
public void setMyTestProperty(String myTestProperty) {
|
||||
this.myTestProperty = myTestProperty;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -66,7 +66,6 @@ import org.springframework.util.StringUtils;
|
||||
* @since 2.0.0
|
||||
*/
|
||||
@Endpoint(id = "configprops")
|
||||
@ConfigurationProperties("endpoints.configprops")
|
||||
public class ConfigurationPropertiesReportEndpoint implements ApplicationContextAware {
|
||||
|
||||
private static final String CGLIB_FILTER_ID = "cglibFilter";
|
||||
|
||||
@@ -48,7 +48,7 @@ public class ConfigurationPropertiesReportEndpointParentTests {
|
||||
ConfigurationPropertiesDescriptor result = endpoint
|
||||
.configurationProperties();
|
||||
assertThat(result.getBeans().keySet())
|
||||
.containsExactlyInAnyOrder("endpoint", "someProperties");
|
||||
.containsExactlyInAnyOrder("someProperties");
|
||||
assertThat((result.getParent().getBeans().keySet()))
|
||||
.containsExactly("testProperties");
|
||||
});
|
||||
@@ -68,7 +68,7 @@ public class ConfigurationPropertiesReportEndpointParentTests {
|
||||
ConfigurationPropertiesDescriptor result = endpoint
|
||||
.configurationProperties();
|
||||
assertThat(result.getBeans().keySet())
|
||||
.containsExactlyInAnyOrder("endpoint", "otherProperties");
|
||||
.containsExactlyInAnyOrder("otherProperties");
|
||||
assertThat((result.getParent().getBeans().keySet()))
|
||||
.containsExactly("testProperties");
|
||||
});
|
||||
|
||||
@@ -100,25 +100,6 @@ public class ConfigurationPropertiesReportEndpointTests {
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void keysToSanitizeCanBeConfiguredViaTheEnvironment() throws Exception {
|
||||
ApplicationContextRunner tester = new ApplicationContextRunner()
|
||||
.withPropertyValues(
|
||||
"endpoints.configprops.keys-to-sanitize: .*pass.*, property")
|
||||
.withUserConfiguration(Config.class);
|
||||
tester.run((context) -> {
|
||||
ConfigurationPropertiesReportEndpoint endpoint = context
|
||||
.getBean(ConfigurationPropertiesReportEndpoint.class);
|
||||
ConfigurationPropertiesDescriptor properties = endpoint
|
||||
.configurationProperties();
|
||||
Map<String, Object> nestedProperties = properties.getBeans()
|
||||
.get("testProperties").getProperties();
|
||||
assertThat(nestedProperties).isNotNull();
|
||||
assertThat(nestedProperties.get("dbPassword")).isEqualTo("******");
|
||||
assertThat(nestedProperties.get("myTestProperty")).isEqualTo("******");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("unchecked")
|
||||
public void keySanitizationWithCustomPatternUsingCompositeKeys() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user