Browse Source
When the user sets management.contextPath=/admin the Jolokia endpoint gets mapped to /admin/jolokia, but that the path stripper it uses internally makes a false assumption about the form of the request path. The fix is simple (just use a smarter search for the endpoint path in the request path). Fixes gh-642pull/653/head
2 changed files with 96 additions and 2 deletions
@ -0,0 +1,94 @@
@@ -0,0 +1,94 @@
|
||||
/* |
||||
* Copyright 2013-2014 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.endpoint.mvc; |
||||
|
||||
import org.junit.Before; |
||||
import org.junit.Test; |
||||
import org.junit.runner.RunWith; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration; |
||||
import org.springframework.boot.actuate.autoconfigure.JolokiaAutoConfiguration; |
||||
import org.springframework.boot.actuate.autoconfigure.ManagementServerPropertiesAutoConfiguration; |
||||
import org.springframework.boot.actuate.endpoint.mvc.JolokiaEndpointContextPathTests.Config; |
||||
import org.springframework.boot.actuate.endpoint.mvc.JolokiaEndpointContextPathTests.ContextPathListener; |
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties; |
||||
import org.springframework.boot.test.EnvironmentTestUtils; |
||||
import org.springframework.boot.test.SpringApplicationConfiguration; |
||||
import org.springframework.context.ApplicationContextInitializer; |
||||
import org.springframework.context.ConfigurableApplicationContext; |
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.context.annotation.Import; |
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; |
||||
import org.springframework.test.context.web.WebAppConfiguration; |
||||
import org.springframework.test.web.servlet.MockMvc; |
||||
import org.springframework.test.web.servlet.setup.MockMvcBuilders; |
||||
import org.springframework.web.context.WebApplicationContext; |
||||
import org.springframework.web.servlet.config.annotation.EnableWebMvc; |
||||
|
||||
import static org.hamcrest.Matchers.containsString; |
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; |
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; |
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; |
||||
|
||||
/** |
||||
* @author Christian Dupuis |
||||
* @author Dave Syer |
||||
*/ |
||||
@RunWith(SpringJUnit4ClassRunner.class) |
||||
@SpringApplicationConfiguration(classes = { Config.class }, initializers = ContextPathListener.class) |
||||
@WebAppConfiguration |
||||
public class JolokiaEndpointContextPathTests { |
||||
|
||||
@Autowired |
||||
private MvcEndpoints endpoints; |
||||
|
||||
@Autowired |
||||
private WebApplicationContext context; |
||||
|
||||
private MockMvc mvc; |
||||
|
||||
@Before |
||||
public void setUp() { |
||||
this.mvc = MockMvcBuilders.webAppContextSetup(this.context).build(); |
||||
EnvironmentTestUtils.addEnvironment( |
||||
(ConfigurableApplicationContext) this.context, "foo:bar"); |
||||
} |
||||
|
||||
@Test |
||||
public void read() throws Exception { |
||||
this.mvc.perform(get("/admin/jolokia/read/java.lang:type=Memory")) |
||||
.andExpect(status().isOk()) |
||||
.andExpect(content().string(containsString("NonHeapMemoryUsage"))); |
||||
} |
||||
|
||||
@Configuration |
||||
@EnableConfigurationProperties |
||||
@EnableWebMvc |
||||
@Import({ EndpointWebMvcAutoConfiguration.class, JolokiaAutoConfiguration.class, |
||||
ManagementServerPropertiesAutoConfiguration.class }) |
||||
public static class Config { |
||||
} |
||||
|
||||
public static class ContextPathListener implements |
||||
ApplicationContextInitializer<ConfigurableApplicationContext> { |
||||
@Override |
||||
public void initialize(ConfigurableApplicationContext context) { |
||||
EnvironmentTestUtils.addEnvironment(context, "management.contextPath:/admin"); |
||||
} |
||||
|
||||
} |
||||
} |
||||
Loading…
Reference in new issue