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.ConfigurableEnvironment;
 | 
				
			||||||
import org.springframework.core.env.EnumerablePropertySource;
 | 
					import org.springframework.core.env.EnumerablePropertySource;
 | 
				
			||||||
import org.springframework.core.env.Environment;
 | 
					import org.springframework.core.env.Environment;
 | 
				
			||||||
 | 
					import org.springframework.core.env.PropertyResolver;
 | 
				
			||||||
import org.springframework.core.env.PropertySource;
 | 
					import org.springframework.core.env.PropertySource;
 | 
				
			||||||
import org.springframework.core.env.PropertySources;
 | 
					import org.springframework.core.env.PropertySources;
 | 
				
			||||||
 | 
					import org.springframework.core.env.PropertySourcesPropertyResolver;
 | 
				
			||||||
import org.springframework.http.HttpStatus;
 | 
					import org.springframework.http.HttpStatus;
 | 
				
			||||||
import org.springframework.http.MediaType;
 | 
					import org.springframework.http.MediaType;
 | 
				
			||||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
					import org.springframework.web.bind.annotation.GetMapping;
 | 
				
			||||||
| 
						 | 
					@ -95,7 +97,14 @@ public class EnvironmentMvcEndpoint extends EndpointMvcAdapter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		@Override
 | 
							@Override
 | 
				
			||||||
		protected Object getOptionalValue(Environment source, String name) {
 | 
							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) {
 | 
								if (result != null) {
 | 
				
			||||||
				result = ((EnvironmentEndpoint) getDelegate()).sanitize(name, result);
 | 
									result = ((EnvironmentEndpoint) getDelegate()).sanitize(name, result);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -102,6 +102,16 @@ public class EnvironmentMvcEndpointTests {
 | 
				
			||||||
				.andExpect(content().string(containsString("\"fool\":\"baz\"")));
 | 
									.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
 | 
						@Configuration
 | 
				
			||||||
	@Import({ JacksonAutoConfiguration.class,
 | 
						@Import({ JacksonAutoConfiguration.class,
 | 
				
			||||||
			HttpMessageConvertersAutoConfiguration.class, WebMvcAutoConfiguration.class,
 | 
								HttpMessageConvertersAutoConfiguration.class, WebMvcAutoConfiguration.class,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue