Browse Source

Add property to specify the management access log prefix

See gh-43434
pull/43837/head
Michel Palourdio 1 year ago committed by Moritz Halbritter
parent
commit
020fd7b155
  1. 24
      spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties.java
  2. 39
      spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java
  3. 6
      spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerPropertiesTests.java

24
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties.java

@ -57,6 +57,8 @@ public class ManagementServerProperties {
@NestedConfigurationProperty @NestedConfigurationProperty
private Ssl ssl; private Ssl ssl;
private final Accesslog accesslog = new Accesslog();
/** /**
* Returns the management port or {@code null} if the * Returns the management port or {@code null} if the
* {@link ServerProperties#getPort() server port} should be used. * {@link ServerProperties#getPort() server port} should be used.
@ -117,4 +119,26 @@ public class ManagementServerProperties {
return candidate; return candidate;
} }
public Accesslog getAccesslog() {
return this.accesslog;
}
public static class Accesslog {
/**
* Enable management access logs prefix customization
* management.server.accesslog.prefix.
*/
private String prefix = "management_";
public String getPrefix() {
return this.prefix;
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
}
} }

39
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java

@ -47,6 +47,7 @@ import org.springframework.boot.autoconfigure.web.embedded.UndertowWebServerFact
import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryCustomizer; import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryCustomizer;
import org.springframework.boot.autoconfigure.web.servlet.TomcatServletWebServerFactoryCustomizer; import org.springframework.boot.autoconfigure.web.servlet.TomcatServletWebServerFactoryCustomizer;
import org.springframework.boot.autoconfigure.web.servlet.UndertowServletWebServerFactoryCustomizer; import org.springframework.boot.autoconfigure.web.servlet.UndertowServletWebServerFactoryCustomizer;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory; import org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory;
@ -73,6 +74,7 @@ import org.springframework.util.StringUtils;
*/ */
@ManagementContextConfiguration(value = ManagementContextType.CHILD, proxyBeanMethods = false) @ManagementContextConfiguration(value = ManagementContextType.CHILD, proxyBeanMethods = false)
@ConditionalOnWebApplication(type = Type.SERVLET) @ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties(ManagementServerProperties.class)
class ServletManagementChildContextConfiguration { class ServletManagementChildContextConfiguration {
@Bean @Bean
@ -83,20 +85,22 @@ class ServletManagementChildContextConfiguration {
@Bean @Bean
@ConditionalOnClass(name = "io.undertow.Undertow") @ConditionalOnClass(name = "io.undertow.Undertow")
UndertowAccessLogCustomizer undertowManagementAccessLogCustomizer() { UndertowAccessLogCustomizer undertowManagementAccessLogCustomizer(
return new UndertowAccessLogCustomizer(); ManagementServerProperties managementServerProperties) {
return new UndertowAccessLogCustomizer(managementServerProperties);
} }
@Bean @Bean
@ConditionalOnClass(name = "org.apache.catalina.valves.AccessLogValve") @ConditionalOnClass(name = "org.apache.catalina.valves.AccessLogValve")
TomcatAccessLogCustomizer tomcatManagementAccessLogCustomizer() { TomcatAccessLogCustomizer tomcatManagementAccessLogCustomizer(
return new TomcatAccessLogCustomizer(); ManagementServerProperties managementServerProperties) {
return new TomcatAccessLogCustomizer(managementServerProperties);
} }
@Bean @Bean
@ConditionalOnClass(name = "org.eclipse.jetty.server.Server") @ConditionalOnClass(name = "org.eclipse.jetty.server.Server")
JettyAccessLogCustomizer jettyManagementAccessLogCustomizer() { JettyAccessLogCustomizer jettyManagementAccessLogCustomizer(ManagementServerProperties managementServerProperties) {
return new JettyAccessLogCustomizer(); return new JettyAccessLogCustomizer(managementServerProperties);
} }
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
@ -145,14 +149,18 @@ class ServletManagementChildContextConfiguration {
abstract static class AccessLogCustomizer implements Ordered { abstract static class AccessLogCustomizer implements Ordered {
private static final String MANAGEMENT_PREFIX = "management_"; protected final ManagementServerProperties managementServerProperties;
AccessLogCustomizer(ManagementServerProperties managementServerProperties) {
this.managementServerProperties = managementServerProperties;
}
protected String customizePrefix(String prefix) { protected String customizePrefix(String prefix) {
prefix = (prefix != null) ? prefix : ""; prefix = (prefix != null) ? prefix : "";
if (prefix.startsWith(MANAGEMENT_PREFIX)) { if (prefix.startsWith(this.managementServerProperties.getAccesslog().getPrefix())) {
return prefix; return prefix;
} }
return MANAGEMENT_PREFIX + prefix; return this.managementServerProperties.getAccesslog().getPrefix() + prefix;
} }
@Override @Override
@ -165,12 +173,17 @@ class ServletManagementChildContextConfiguration {
static class TomcatAccessLogCustomizer extends AccessLogCustomizer static class TomcatAccessLogCustomizer extends AccessLogCustomizer
implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> { implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
TomcatAccessLogCustomizer(ManagementServerProperties managementServerProperties) {
super(managementServerProperties);
}
@Override @Override
public void customize(TomcatServletWebServerFactory factory) { public void customize(TomcatServletWebServerFactory factory) {
AccessLogValve accessLogValve = findAccessLogValve(factory); AccessLogValve accessLogValve = findAccessLogValve(factory);
if (accessLogValve == null) { if (accessLogValve == null) {
return; return;
} }
accessLogValve.setPrefix(customizePrefix(accessLogValve.getPrefix())); accessLogValve.setPrefix(customizePrefix(accessLogValve.getPrefix()));
} }
@ -188,6 +201,10 @@ class ServletManagementChildContextConfiguration {
static class UndertowAccessLogCustomizer extends AccessLogCustomizer static class UndertowAccessLogCustomizer extends AccessLogCustomizer
implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> { implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> {
UndertowAccessLogCustomizer(ManagementServerProperties managementServerProperties) {
super(managementServerProperties);
}
@Override @Override
public void customize(UndertowServletWebServerFactory factory) { public void customize(UndertowServletWebServerFactory factory) {
factory.setAccessLogPrefix(customizePrefix(factory.getAccessLogPrefix())); factory.setAccessLogPrefix(customizePrefix(factory.getAccessLogPrefix()));
@ -198,6 +215,10 @@ class ServletManagementChildContextConfiguration {
static class JettyAccessLogCustomizer extends AccessLogCustomizer static class JettyAccessLogCustomizer extends AccessLogCustomizer
implements WebServerFactoryCustomizer<JettyServletWebServerFactory> { implements WebServerFactoryCustomizer<JettyServletWebServerFactory> {
JettyAccessLogCustomizer(ManagementServerProperties managementServerProperties) {
super(managementServerProperties);
}
@Override @Override
public void customize(JettyServletWebServerFactory factory) { public void customize(JettyServletWebServerFactory factory) {
factory.addServerCustomizers(this::customizeServer); factory.addServerCustomizers(this::customizeServer);

6
spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerPropertiesTests.java

@ -68,4 +68,10 @@ class ManagementServerPropertiesTests {
assertThat(properties.getBasePath()).isEmpty(); assertThat(properties.getBasePath()).isEmpty();
} }
@Test
void accessLogsArePrefixedByDefault() {
ManagementServerProperties properties = new ManagementServerProperties();
assertThat(properties.getAccesslog().getPrefix()).isEqualTo("management_");
}
} }

Loading…
Cancel
Save