1616
1717package org .springframework .boot .actuate .autoconfigure .integrationtest ;
1818
19+ import java .util .ArrayList ;
20+ import java .util .Arrays ;
21+ import java .util .List ;
22+
1923import org .glassfish .jersey .server .ResourceConfig ;
2024import org .junit .jupiter .api .Test ;
2125
2226import org .springframework .boot .actuate .autoconfigure .beans .BeansEndpointAutoConfiguration ;
2327import org .springframework .boot .actuate .autoconfigure .endpoint .EndpointAutoConfiguration ;
2428import org .springframework .boot .actuate .autoconfigure .endpoint .web .WebEndpointAutoConfiguration ;
29+ import org .springframework .boot .actuate .autoconfigure .security .servlet .ManagementWebSecurityAutoConfiguration ;
2530import org .springframework .boot .actuate .autoconfigure .web .server .ManagementContextAutoConfiguration ;
2631import org .springframework .boot .actuate .endpoint .web .annotation .ControllerEndpoint ;
2732import org .springframework .boot .actuate .endpoint .web .annotation .RestControllerEndpoint ;
2833import org .springframework .boot .autoconfigure .AutoConfigurations ;
2934import org .springframework .boot .autoconfigure .jackson .JacksonAutoConfiguration ;
3035import org .springframework .boot .autoconfigure .jersey .JerseyAutoConfiguration ;
36+ import org .springframework .boot .autoconfigure .security .servlet .SecurityAutoConfiguration ;
3137import org .springframework .boot .autoconfigure .web .servlet .ServletWebServerFactoryAutoConfiguration ;
3238import org .springframework .boot .test .context .FilteredClassLoader ;
3339import org .springframework .boot .test .context .runner .WebApplicationContextRunner ;
@@ -67,6 +73,20 @@ void actuatorEndpointsWhenUserProvidedResourceConfigBeanNotAvailable() {
6773 testJerseyEndpoints (new Class <?>[] { EndpointsConfiguration .class });
6874 }
6975
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+
7090 protected void testJerseyEndpoints (Class <?>[] userConfigurations ) {
7191 getContextRunner (userConfigurations ).run ((context ) -> {
7292 int port = context .getSourceApplicationContext (AnnotationConfigServletWebServerApplicationContext .class )
@@ -78,18 +98,25 @@ protected void testJerseyEndpoints(Class<?>[] userConfigurations) {
7898 });
7999 }
80100
81- WebApplicationContextRunner getContextRunner (Class <?>[] userConfigurations ) {
101+ WebApplicationContextRunner getContextRunner (Class <?>[] userConfigurations ,
102+ Class <?>... additionalAutoConfigurations ) {
82103 FilteredClassLoader classLoader = new FilteredClassLoader (DispatcherServlet .class );
83104 return new WebApplicationContextRunner (AnnotationConfigServletWebServerApplicationContext ::new )
84105 .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 )))
89107 .withUserConfiguration (userConfigurations )
90108 .withPropertyValues ("management.endpoints.web.exposure.include:*" , "server.port:0" );
91109 }
92110
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+
93120 @ ControllerEndpoint (id = "controller" )
94121 static class TestControllerEndpoint {
95122
0 commit comments