Fix HAL browser entry point with contextPath
Previously, if the `contextPath` of the application wasn't the root, the HAL browser could not initialize since the `entryPoint` was referring to an invalid location. This commit makes sure to take the `contextPath` into account. Closes gh-5814
This commit is contained in:
parent
72b88790f0
commit
9abca48a7f
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2015 the original author or authors.
|
||||
* Copyright 2012-2016 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.
|
||||
|
@ -38,6 +38,7 @@ import org.springframework.web.servlet.resource.TransformedResource;
|
|||
* @author Dave Syer
|
||||
* @author Phillip Webb
|
||||
* @author Andy Wilkinson
|
||||
* @author Stephane Nicoll
|
||||
* @since 1.3.0
|
||||
*/
|
||||
public class HalBrowserMvcEndpoint extends HalJsonMvcEndpoint
|
||||
|
@ -142,15 +143,15 @@ public class HalBrowserMvcEndpoint extends HalJsonMvcEndpoint
|
|||
resource = transformerChain.transform(request, resource);
|
||||
if (resource.getFilename().equalsIgnoreCase(
|
||||
HalBrowserMvcEndpoint.this.location.getHtmlFile())) {
|
||||
return replaceInitialLink(resource);
|
||||
return replaceInitialLink(request.getContextPath(), resource);
|
||||
}
|
||||
return resource;
|
||||
}
|
||||
|
||||
private Resource replaceInitialLink(Resource resource) throws IOException {
|
||||
private Resource replaceInitialLink(String contextPath, Resource resource) throws IOException {
|
||||
byte[] bytes = FileCopyUtils.copyToByteArray(resource.getInputStream());
|
||||
String content = new String(bytes, DEFAULT_CHARSET);
|
||||
String initial = getManagementServletContext().getContextPath() + getPath();
|
||||
String initial = contextPath + getManagementServletContext().getContextPath() + getPath();
|
||||
content = content.replace("entryPoint: '/'", "entryPoint: '" + initial + "'");
|
||||
return new TransformedResource(resource, content.getBytes(DEFAULT_CHARSET));
|
||||
}
|
||||
|
|
|
@ -36,8 +36,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.context.WebApplicationContext;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.containsString;
|
||||
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
|
||||
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.forwardedUrl;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
@ -88,6 +90,13 @@ public class HalBrowserMvcEndpointManagementContextPathIntegrationTests {
|
|||
.andExpect(forwardedUrl("/admin/browser.html"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void actuatorBrowserHtml() throws Exception {
|
||||
this.mockMvc.perform(get("/admin/browser.html").accept(MediaType.APPLICATION_JSON))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().string(containsString("entryPoint: '/admin'")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void trace() throws Exception {
|
||||
this.mockMvc.perform(get("/admin/trace").accept(MediaType.APPLICATION_JSON))
|
||||
|
|
|
@ -85,6 +85,18 @@ public class HalBrowserMvcEndpointServerContextPathIntegrationTests {
|
|||
entity.getBody().contains("<title"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void actuatorBrowserEntryPoint() throws Exception {
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setAccept(Arrays.asList(MediaType.TEXT_HTML));
|
||||
ResponseEntity<String> entity = new TestRestTemplate().exchange(
|
||||
"http://localhost:" + this.port + "/spring/actuator/browser.html", HttpMethod.GET,
|
||||
new HttpEntity<Void>(null, headers), String.class);
|
||||
assertEquals(HttpStatus.OK, entity.getStatusCode());
|
||||
assertTrue("Wrong body: " + entity.getBody(),
|
||||
entity.getBody().contains("entryPoint: '/spring/actuator'"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void actuatorLinks() throws Exception {
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
|
Loading…
Reference in New Issue