Account for application path for Jersey servlet endpoints

Closes gh-14895
This commit is contained in:
Madhura Bhave
2018-10-29 13:20:21 -07:00
parent 8560010bd4
commit decaacddce
9 changed files with 387 additions and 43 deletions

View File

@@ -156,7 +156,7 @@ public abstract class AbstractEndpointRequestIntegrationTests {
}
interface TestPathMappedEndpoint
public interface TestPathMappedEndpoint
extends ExposableEndpoint<Operation>, PathMappedEndpoint {
}

View File

@@ -23,6 +23,7 @@ import java.util.List;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.model.Resource;
import org.junit.Test;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
import org.springframework.boot.actuate.endpoint.http.ActuatorMediaType;
@@ -41,12 +42,14 @@ import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfi
import org.springframework.boot.autoconfigure.security.servlet.SecurityRequestMatcherProviderAutoConfiguration;
import org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.test.context.FilteredClassLoader;
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.web.reactive.server.WebTestClient;
/**
* Integration tests for {@link EndpointRequest} with Jersey.
@@ -60,6 +63,8 @@ public class JerseyEndpointRequestIntegrationTests
protected WebApplicationContextRunner getContextRunner() {
return new WebApplicationContextRunner(
AnnotationConfigServletWebServerApplicationContext::new)
.withClassLoader(new FilteredClassLoader(
"org.springframework.web.servlet.DispatcherServlet"))
.withUserConfiguration(JerseyEndpointConfiguration.class,
SecurityConfiguration.class, BaseConfiguration.class)
.withConfiguration(AutoConfigurations.of(
@@ -70,6 +75,41 @@ public class JerseyEndpointRequestIntegrationTests
JerseyAutoConfiguration.class));
}
@Test
public void toLinksWhenApplicationPathSetShouldMatch() {
getContextRunner().withPropertyValues("spring.jersey.application-path=/admin")
.run((context) -> {
WebTestClient webTestClient = getWebTestClient(context);
webTestClient.get().uri("/admin/actuator/").exchange().expectStatus()
.isOk();
webTestClient.get().uri("/admin/actuator").exchange().expectStatus()
.isOk();
});
}
@Test
public void toEndpointWhenApplicationPathSetShouldMatch() {
getContextRunner().withPropertyValues("spring.jersey.application-path=/admin")
.run((context) -> {
WebTestClient webTestClient = getWebTestClient(context);
webTestClient.get().uri("/admin/actuator/e1").exchange()
.expectStatus().isOk();
});
}
@Test
public void toAnyEndpointWhenApplicationPathSetShouldMatch() {
getContextRunner().withPropertyValues("spring.jersey.application-path=/admin",
"spring.security.user.password=password").run((context) -> {
WebTestClient webTestClient = getWebTestClient(context);
webTestClient.get().uri("/admin/actuator/e2").exchange()
.expectStatus().isUnauthorized();
webTestClient.get().uri("/admin/actuator/e2")
.header("Authorization", getBasicAuth()).exchange()
.expectStatus().isOk();
});
}
@Configuration
@EnableConfigurationProperties(WebEndpointProperties.class)
static class JerseyEndpointConfiguration {