|
16 | 16 |
|
17 | 17 | package org.springframework.boot.actuate.autoconfigure.integrationtest;
|
18 | 18 |
|
| 19 | +import java.util.ArrayList; |
| 20 | +import java.util.Arrays; |
| 21 | +import java.util.List; |
| 22 | + |
19 | 23 | import org.glassfish.jersey.server.ResourceConfig;
|
20 | 24 | import org.junit.jupiter.api.Test;
|
21 | 25 |
|
22 | 26 | import org.springframework.boot.actuate.autoconfigure.beans.BeansEndpointAutoConfiguration;
|
23 | 27 | import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration;
|
24 | 28 | import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration;
|
| 29 | +import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration; |
25 | 30 | import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration;
|
26 | 31 | import org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpoint;
|
27 | 32 | import org.springframework.boot.actuate.endpoint.web.annotation.RestControllerEndpoint;
|
@@ -55,24 +60,46 @@ void actuatorEndpointsWhenUserProvidedResourceConfigBeanNotAvailable() {
|
55 | 60 | testJerseyEndpoints(new Class[] { EndpointsConfiguration.class });
|
56 | 61 | }
|
57 | 62 |
|
| 63 | + @Test |
| 64 | + void actuatorEndpointsWhenSecurityAvailable() { |
| 65 | + WebApplicationContextRunner contextRunner = getContextRunner( |
| 66 | + new Class[] { EndpointsConfiguration.class, ResourceConfigConfiguration.class }, |
| 67 | + getAutoconfigurations(ManagementWebSecurityAutoConfiguration.class)); |
| 68 | + contextRunner.run((context) -> { |
| 69 | + int port = context.getSourceApplicationContext(AnnotationConfigServletWebServerApplicationContext.class) |
| 70 | + .getWebServer().getPort(); |
| 71 | + WebTestClient client = WebTestClient.bindToServer().baseUrl("http://localhost:" + port).build(); |
| 72 | + client.get().uri("/actuator").exchange().expectStatus().isUnauthorized(); |
| 73 | + }); |
| 74 | + |
| 75 | + } |
| 76 | + |
58 | 77 | protected void testJerseyEndpoints(Class<?>[] userConfigurations) {
|
| 78 | + getContextRunner(userConfigurations, getAutoconfigurations()).run((context) -> { |
| 79 | + int port = context.getSourceApplicationContext(AnnotationConfigServletWebServerApplicationContext.class) |
| 80 | + .getWebServer().getPort(); |
| 81 | + WebTestClient client = WebTestClient.bindToServer().baseUrl("http://localhost:" + port).build(); |
| 82 | + client.get().uri("/actuator").exchange().expectStatus().isOk().expectBody().jsonPath("_links.beans") |
| 83 | + .isNotEmpty().jsonPath("_links.restcontroller").doesNotExist().jsonPath("_links.controller") |
| 84 | + .doesNotExist(); |
| 85 | + }); |
| 86 | + } |
| 87 | + |
| 88 | + private WebApplicationContextRunner getContextRunner(Class<?>[] userConfigurations, Class<?>[] autoConfigurations) { |
59 | 89 | FilteredClassLoader classLoader = new FilteredClassLoader(DispatcherServlet.class);
|
60 |
| - new WebApplicationContextRunner(AnnotationConfigServletWebServerApplicationContext::new) |
61 |
| - .withClassLoader(classLoader) |
62 |
| - .withConfiguration(AutoConfigurations.of(JacksonAutoConfiguration.class, JerseyAutoConfiguration.class, |
63 |
| - EndpointAutoConfiguration.class, ServletWebServerFactoryAutoConfiguration.class, |
64 |
| - WebEndpointAutoConfiguration.class, ManagementContextAutoConfiguration.class, |
65 |
| - BeansEndpointAutoConfiguration.class)) |
| 90 | + return new WebApplicationContextRunner(AnnotationConfigServletWebServerApplicationContext::new) |
| 91 | + .withClassLoader(classLoader).withConfiguration(AutoConfigurations.of(autoConfigurations)) |
66 | 92 | .withUserConfiguration(userConfigurations)
|
67 |
| - .withPropertyValues("management.endpoints.web.exposure.include:*", "server.port:0").run((context) -> { |
68 |
| - int port = context |
69 |
| - .getSourceApplicationContext(AnnotationConfigServletWebServerApplicationContext.class) |
70 |
| - .getWebServer().getPort(); |
71 |
| - WebTestClient client = WebTestClient.bindToServer().baseUrl("http://localhost:" + port).build(); |
72 |
| - client.get().uri("/actuator").exchange().expectStatus().isOk().expectBody().jsonPath("_links.beans") |
73 |
| - .isNotEmpty().jsonPath("_links.restcontroller").doesNotExist().jsonPath("_links.controller") |
74 |
| - .doesNotExist(); |
75 |
| - }); |
| 93 | + .withPropertyValues("management.endpoints.web.exposure.include:*", "server.port:0"); |
| 94 | + } |
| 95 | + |
| 96 | + private Class<?>[] getAutoconfigurations(Class<?>... additional) { |
| 97 | + List<Class<?>> autoconfigurations = new ArrayList<>(Arrays.asList(JacksonAutoConfiguration.class, |
| 98 | + JerseyAutoConfiguration.class, EndpointAutoConfiguration.class, |
| 99 | + ServletWebServerFactoryAutoConfiguration.class, WebEndpointAutoConfiguration.class, |
| 100 | + ManagementContextAutoConfiguration.class, BeansEndpointAutoConfiguration.class)); |
| 101 | + autoconfigurations.addAll(Arrays.asList(additional)); |
| 102 | + return autoconfigurations.toArray(new Class<?>[0]); |
76 | 103 | }
|
77 | 104 |
|
78 | 105 | @ControllerEndpoint(id = "controller")
|
|
0 commit comments