LiveBeansView escapes double quotes in resource descriptions
Issue: SPR-12252
(cherry picked from commit 1ffefcb)
This commit is contained in:
@@ -57,6 +57,7 @@ public class LiveBeansView implements LiveBeansViewMBean, ApplicationContextAwar
|
||||
private static final Set<ConfigurableApplicationContext> applicationContexts =
|
||||
new LinkedHashSet<ConfigurableApplicationContext>();
|
||||
|
||||
|
||||
static void registerApplicationContext(ConfigurableApplicationContext applicationContext) {
|
||||
String mbeanDomain = applicationContext.getEnvironment().getProperty(MBEAN_DOMAIN_PROPERTY_NAME);
|
||||
if (mbeanDomain != null) {
|
||||
@@ -94,6 +95,7 @@ public class LiveBeansView implements LiveBeansViewMBean, ApplicationContextAwar
|
||||
|
||||
private ConfigurableApplicationContext applicationContext;
|
||||
|
||||
|
||||
public void setApplicationContext(ApplicationContext applicationContext) {
|
||||
Assert.isTrue(applicationContext instanceof ConfigurableApplicationContext,
|
||||
"ApplicationContext does not implement ConfigurableApplicationContext");
|
||||
@@ -173,8 +175,7 @@ public class LiveBeansView implements LiveBeansViewMBean, ApplicationContextAwar
|
||||
else {
|
||||
result.append("\"type\": null,\n");
|
||||
}
|
||||
String resource = StringUtils.replace(bd.getResourceDescription(), "\\", "/");
|
||||
result.append("\"resource\": \"").append(resource).append("\",\n");
|
||||
result.append("\"resource\": \"").append(getEscapedResourceDescription(bd)).append("\",\n");
|
||||
result.append("\"dependencies\": [");
|
||||
String[] dependencies = bf.getDependenciesForBean(beanName);
|
||||
if (dependencies.length > 0) {
|
||||
@@ -199,7 +200,7 @@ public class LiveBeansView implements LiveBeansViewMBean, ApplicationContextAwar
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the specified bean is eligible for inclusion in the
|
||||
* Determine whether the specified bean is eligible for inclusion in the
|
||||
* LiveBeansView JSON snapshot.
|
||||
* @param beanName the name of the bean
|
||||
* @param bd the corresponding bean definition
|
||||
@@ -211,4 +212,31 @@ public class LiveBeansView implements LiveBeansViewMBean, ApplicationContextAwar
|
||||
(!bd.isLazyInit() || bf.containsSingleton(beanName)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine a resource description for the given bean definition and
|
||||
* apply basic JSON escaping (backslashes, double quotes) to it.
|
||||
* @param bd the bean definition to build the resource description for
|
||||
* @return the JSON-escaped resource description
|
||||
*/
|
||||
protected String getEscapedResourceDescription(BeanDefinition bd) {
|
||||
String resourceDescription = bd.getResourceDescription();
|
||||
if (resourceDescription == null) {
|
||||
return null;
|
||||
}
|
||||
StringBuilder result = new StringBuilder(resourceDescription.length() + 16);
|
||||
for (int i = 0; i < resourceDescription.length(); i++) {
|
||||
char character = resourceDescription.charAt(i);
|
||||
if (character == '\\') {
|
||||
result.append('/');
|
||||
}
|
||||
else if (character == '"') {
|
||||
result.append("\\").append('"');
|
||||
}
|
||||
else {
|
||||
result.append(character);
|
||||
}
|
||||
}
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user