|
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; |
28 | 33 | import org.springframework.boot.autoconfigure.AutoConfigurations; |
29 | 34 | import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; |
30 | 35 | import org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration; |
| 36 | +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; |
31 | 37 | import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration; |
32 | 38 | import org.springframework.boot.test.context.FilteredClassLoader; |
33 | 39 | import org.springframework.boot.test.context.runner.WebApplicationContextRunner; |
@@ -55,24 +61,46 @@ void actuatorEndpointsWhenUserProvidedResourceConfigBeanNotAvailable() { |
55 | 61 | testJerseyEndpoints(new Class<?>[] { EndpointsConfiguration.class }); |
56 | 62 | } |
57 | 63 |
|
| 64 | + @Test |
| 65 | + void actuatorEndpointsWhenSecurityAvailable() { |
| 66 | + WebApplicationContextRunner contextRunner = getContextRunner( |
| 67 | + new Class[] { EndpointsConfiguration.class, ResourceConfigConfiguration.class }, |
| 68 | + getAutoconfigurations(SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class)); |
| 69 | + contextRunner.run((context) -> { |
| 70 | + int port = context.getSourceApplicationContext(AnnotationConfigServletWebServerApplicationContext.class) |
| 71 | + .getWebServer().getPort(); |
| 72 | + WebTestClient client = WebTestClient.bindToServer().baseUrl("http://localhost:" + port).build(); |
| 73 | + client.get().uri("/actuator").exchange().expectStatus().isUnauthorized(); |
| 74 | + }); |
| 75 | + |
| 76 | + } |
| 77 | + |
58 | 78 | protected void testJerseyEndpoints(Class<?>[] userConfigurations) { |
| 79 | + getContextRunner(userConfigurations, getAutoconfigurations()).run((context) -> { |
| 80 | + int port = context.getSourceApplicationContext(AnnotationConfigServletWebServerApplicationContext.class) |
| 81 | + .getWebServer().getPort(); |
| 82 | + WebTestClient client = WebTestClient.bindToServer().baseUrl("http://localhost:" + port).build(); |
| 83 | + client.get().uri("/actuator").exchange().expectStatus().isOk().expectBody().jsonPath("_links.beans") |
| 84 | + .isNotEmpty().jsonPath("_links.restcontroller").doesNotExist().jsonPath("_links.controller") |
| 85 | + .doesNotExist(); |
| 86 | + }); |
| 87 | + } |
| 88 | + |
| 89 | + private WebApplicationContextRunner getContextRunner(Class<?>[] userConfigurations, Class<?>[] autoConfigurations) { |
59 | 90 | 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)) |
| 91 | + return new WebApplicationContextRunner(AnnotationConfigServletWebServerApplicationContext::new) |
| 92 | + .withClassLoader(classLoader).withConfiguration(AutoConfigurations.of(autoConfigurations)) |
66 | 93 | .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 | | - }); |
| 94 | + .withPropertyValues("management.endpoints.web.exposure.include:*", "server.port:0"); |
| 95 | + } |
| 96 | + |
| 97 | + private Class<?>[] getAutoconfigurations(Class<?>... additional) { |
| 98 | + List<Class<?>> autoconfigurations = new ArrayList<>(Arrays.asList(JacksonAutoConfiguration.class, |
| 99 | + JerseyAutoConfiguration.class, EndpointAutoConfiguration.class, |
| 100 | + ServletWebServerFactoryAutoConfiguration.class, WebEndpointAutoConfiguration.class, |
| 101 | + ManagementContextAutoConfiguration.class, BeansEndpointAutoConfiguration.class)); |
| 102 | + autoconfigurations.addAll(Arrays.asList(additional)); |
| 103 | + return autoconfigurations.toArray(new Class<?>[0]); |
76 | 104 | } |
77 | 105 |
|
78 | 106 | @ControllerEndpoint(id = "controller") |
|
0 commit comments