Ignore unresolvable nested placeholders
The NamePatternEnvironmentFilter used to throw an exception if placeholders in property values could not be resolved. Fixes gh-8510
This commit is contained in:
		
							parent
							
								
									f5aeac3658
								
							
						
					
					
						commit
						67068fc83d
					
				| 
						 | 
				
			
			@ -22,8 +22,10 @@ import org.springframework.context.EnvironmentAware;
 | 
			
		|||
import org.springframework.core.env.ConfigurableEnvironment;
 | 
			
		||||
import org.springframework.core.env.EnumerablePropertySource;
 | 
			
		||||
import org.springframework.core.env.Environment;
 | 
			
		||||
import org.springframework.core.env.PropertyResolver;
 | 
			
		||||
import org.springframework.core.env.PropertySource;
 | 
			
		||||
import org.springframework.core.env.PropertySources;
 | 
			
		||||
import org.springframework.core.env.PropertySourcesPropertyResolver;
 | 
			
		||||
import org.springframework.http.HttpStatus;
 | 
			
		||||
import org.springframework.http.MediaType;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +97,14 @@ public class EnvironmentMvcEndpoint extends EndpointMvcAdapter
 | 
			
		|||
 | 
			
		||||
		@Override
 | 
			
		||||
		protected Object getOptionalValue(Environment source, String name) {
 | 
			
		||||
			Object result = source.getProperty(name);
 | 
			
		||||
			PropertyResolver resolver = source;
 | 
			
		||||
			if (source instanceof ConfigurableEnvironment) {
 | 
			
		||||
				resolver = new PropertySourcesPropertyResolver(
 | 
			
		||||
						((ConfigurableEnvironment) source).getPropertySources());
 | 
			
		||||
				((PropertySourcesPropertyResolver) resolver)
 | 
			
		||||
						.setIgnoreUnresolvableNestedPlaceholders(true);
 | 
			
		||||
			}
 | 
			
		||||
			Object result = resolver.getProperty(name);
 | 
			
		||||
			if (result != null) {
 | 
			
		||||
				result = ((EnvironmentEndpoint) getDelegate()).sanitize(name, result);
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -102,6 +102,16 @@ public class EnvironmentMvcEndpointTests {
 | 
			
		|||
				.andExpect(content().string(containsString("\"fool\":\"baz\"")));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void nestedPathWhenPlaceholderCannotBeResolvedShouldReturnUnresolvedProperty() throws Exception {
 | 
			
		||||
		Map<String, Object> map = new HashMap<String, Object>();
 | 
			
		||||
		map.put("my.foo", "${my.bar}");
 | 
			
		||||
		((ConfigurableEnvironment) this.context.getEnvironment()).getPropertySources()
 | 
			
		||||
				.addFirst(new MapPropertySource("unresolved-placeholder", map));
 | 
			
		||||
		this.mvc.perform(get("/env/my.*")).andExpect(status().isOk())
 | 
			
		||||
				.andExpect(content().string(containsString("\"my.foo\":\"${my.bar}\"")));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Configuration
 | 
			
		||||
	@Import({ JacksonAutoConfiguration.class,
 | 
			
		||||
			HttpMessageConvertersAutoConfiguration.class, WebMvcAutoConfiguration.class,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue