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 ;
@@ -67,6 +73,20 @@ void actuatorEndpointsWhenUserProvidedResourceConfigBeanNotAvailable() {
67
73
testJerseyEndpoints (new Class <?>[] { EndpointsConfiguration .class });
68
74
}
69
75
76
+ @ Test
77
+ void actuatorEndpointsWhenSecurityAvailable () {
78
+ WebApplicationContextRunner contextRunner = getContextRunner (
79
+ new Class [] { EndpointsConfiguration .class , ResourceConfigConfiguration .class },
80
+ getAutoconfigurations (SecurityAutoConfiguration .class , ManagementWebSecurityAutoConfiguration .class ));
81
+ contextRunner .run ((context ) -> {
82
+ int port = context .getSourceApplicationContext (AnnotationConfigServletWebServerApplicationContext .class )
83
+ .getWebServer ().getPort ();
84
+ WebTestClient client = WebTestClient .bindToServer ().baseUrl ("http://localhost:" + port ).build ();
85
+ client .get ().uri ("/actuator" ).exchange ().expectStatus ().isUnauthorized ();
86
+ });
87
+
88
+ }
89
+
70
90
protected void testJerseyEndpoints (Class <?>[] userConfigurations ) {
71
91
getContextRunner (userConfigurations ).run ((context ) -> {
72
92
int port = context .getSourceApplicationContext (AnnotationConfigServletWebServerApplicationContext .class )
@@ -78,18 +98,25 @@ protected void testJerseyEndpoints(Class<?>[] userConfigurations) {
78
98
});
79
99
}
80
100
81
- WebApplicationContextRunner getContextRunner (Class <?>[] userConfigurations ) {
101
+ WebApplicationContextRunner getContextRunner (Class <?>[] userConfigurations ,
102
+ Class <?>... additionalAutoConfigurations ) {
82
103
FilteredClassLoader classLoader = new FilteredClassLoader (DispatcherServlet .class );
83
104
return new WebApplicationContextRunner (AnnotationConfigServletWebServerApplicationContext ::new )
84
105
.withClassLoader (classLoader )
85
- .withConfiguration (AutoConfigurations .of (JacksonAutoConfiguration .class , JerseyAutoConfiguration .class ,
86
- EndpointAutoConfiguration .class , ServletWebServerFactoryAutoConfiguration .class ,
87
- WebEndpointAutoConfiguration .class , ManagementContextAutoConfiguration .class ,
88
- BeansEndpointAutoConfiguration .class ))
106
+ .withConfiguration (AutoConfigurations .of (getAutoconfigurations (additionalAutoConfigurations )))
89
107
.withUserConfiguration (userConfigurations )
90
108
.withPropertyValues ("management.endpoints.web.exposure.include:*" , "server.port:0" );
91
109
}
92
110
111
+ private Class <?>[] getAutoconfigurations (Class <?>... additional ) {
112
+ List <Class <?>> autoconfigurations = new ArrayList <>(Arrays .asList (JacksonAutoConfiguration .class ,
113
+ JerseyAutoConfiguration .class , EndpointAutoConfiguration .class ,
114
+ ServletWebServerFactoryAutoConfiguration .class , WebEndpointAutoConfiguration .class ,
115
+ ManagementContextAutoConfiguration .class , BeansEndpointAutoConfiguration .class ));
116
+ autoconfigurations .addAll (Arrays .asList (additional ));
117
+ return autoconfigurations .toArray (new Class <?>[0 ]);
118
+ }
119
+
93
120
@ ControllerEndpoint (id = "controller" )
94
121
static class TestControllerEndpoint {
95
122
0 commit comments