From 6d2af95d5925d7e9fb2947e13b60875067ff8133 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Fri, 31 Jul 2015 14:13:36 +0100 Subject: [PATCH] Allow path with / in JolokiaMvcEndpoint See gh-3629 --- .../endpoint/mvc/JolokiaMvcEndpoint.java | 2 +- .../JolokiaAutoConfigurationTests.java | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/JolokiaMvcEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/JolokiaMvcEndpoint.java index 1f708f68e35..a805023bf0b 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/JolokiaMvcEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/JolokiaMvcEndpoint.java @@ -53,7 +53,7 @@ public class JolokiaMvcEndpoint implements MvcEndpoint, InitializingBean, * Endpoint URL path. */ @NotNull - @Pattern(regexp = "/[^/]*", message = "Path must start with /") + @Pattern(regexp = "/[^?#]*", message = "Path must start with /") private String path; /** diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/JolokiaAutoConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/JolokiaAutoConfigurationTests.java index dae25a2d46b..d6d227fc90e 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/JolokiaAutoConfigurationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/JolokiaAutoConfigurationTests.java @@ -16,9 +16,14 @@ package org.springframework.boot.actuate.autoconfigure; +import java.util.Collection; + +import org.hamcrest.Matchers; import org.junit.After; import org.junit.Test; +import org.springframework.boot.actuate.endpoint.mvc.EndpointHandlerMapping; import org.springframework.boot.actuate.endpoint.mvc.JolokiaMvcEndpoint; +import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration; import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration; @@ -30,6 +35,10 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.boot.test.EnvironmentTestUtils; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; import static org.junit.Assert.assertEquals; @@ -67,6 +76,24 @@ public class JolokiaAutoConfigurationTests { assertEquals(1, this.context.getBeanNamesForType(JolokiaMvcEndpoint.class).length); } + @Test + public void agentServletWithCustomPath() throws Exception { + this.context = new AnnotationConfigEmbeddedWebApplicationContext(); + EnvironmentTestUtils.addEnvironment(this.context, + "endpoints.jolokia.path=/foo/bar"); + this.context.register(EndpointsConfig.class, WebMvcAutoConfiguration.class, + PropertyPlaceholderAutoConfiguration.class, + ManagementServerPropertiesAutoConfiguration.class, + HttpMessageConvertersAutoConfiguration.class, + JolokiaAutoConfiguration.class); + this.context.refresh(); + assertEquals(1, this.context.getBeanNamesForType(JolokiaMvcEndpoint.class).length); + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(this.context).build(); + mockMvc.perform(MockMvcRequestBuilders.get("/foo/bar")).andExpect( + MockMvcResultMatchers.content().string( + Matchers.containsString("\"request\":{\"type\""))); + } + @Test public void endpointDisabled() throws Exception { assertEndpointDisabled("endpoints.jolokia.enabled:false"); @@ -106,6 +133,15 @@ public class JolokiaAutoConfigurationTests { assertEquals(1, this.context.getBeanNamesForType(JolokiaMvcEndpoint.class).length); } + @Configuration + protected static class EndpointsConfig extends Config { + @Bean + public EndpointHandlerMapping endpointHandlerMapping( + Collection endpoints) { + return new EndpointHandlerMapping(endpoints); + } + } + @Configuration @EnableConfigurationProperties protected static class Config {