diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/h2/H2ConsoleAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/h2/H2ConsoleAutoConfiguration.java index c857d486fc..0fd3099629 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/h2/H2ConsoleAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/h2/H2ConsoleAutoConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,6 +32,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; +import org.springframework.boot.autoconfigure.h2.H2ConsoleProperties.Settings; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.servlet.ServletRegistrationBean; @@ -62,13 +63,7 @@ public class H2ConsoleAutoConfiguration { String path = properties.getPath(); String urlMapping = path + (path.endsWith("/") ? "*" : "/*"); ServletRegistrationBean registration = new ServletRegistrationBean<>(new WebServlet(), urlMapping); - H2ConsoleProperties.Settings settings = properties.getSettings(); - if (settings.isTrace()) { - registration.addInitParameter("trace", ""); - } - if (settings.isWebAllowOthers()) { - registration.addInitParameter("webAllowOthers", ""); - } + configureH2ConsoleSettings(registration, properties.getSettings()); dataSource.ifAvailable((available) -> { try (Connection connection = available.getConnection()) { logger.info("H2 console available at '" + path + "'. Database available at '" @@ -81,4 +76,16 @@ public class H2ConsoleAutoConfiguration { return registration; } + private void configureH2ConsoleSettings(ServletRegistrationBean registration, Settings settings) { + if (settings.isTrace()) { + registration.addInitParameter("trace", ""); + } + if (settings.isWebAllowOthers()) { + registration.addInitParameter("webAllowOthers", ""); + } + if (settings.getWebAdminPassword() != null) { + registration.addInitParameter("webAdminPassword", settings.getWebAdminPassword()); + } + } + } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/h2/H2ConsoleProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/h2/H2ConsoleProperties.java index 5118a06277..d17ccfabbb 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/h2/H2ConsoleProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/h2/H2ConsoleProperties.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -77,6 +77,11 @@ public class H2ConsoleProperties { */ private boolean webAllowOthers = false; + /** + * Password to access preferences and tools of H2 Console. + */ + private String webAdminPassword; + public boolean isTrace() { return this.trace; } @@ -93,6 +98,14 @@ public class H2ConsoleProperties { this.webAllowOthers = webAllowOthers; } + public String getWebAdminPassword() { + return this.webAdminPassword; + } + + public void setWebAdminPassword(String webAdminPassword) { + this.webAdminPassword = webAdminPassword; + } + } } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/h2/H2ConsoleAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/h2/H2ConsoleAutoConfigurationTests.java index b7c390840a..c5e8ce5d37 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/h2/H2ConsoleAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/h2/H2ConsoleAutoConfigurationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -79,6 +79,7 @@ class H2ConsoleAutoConfigurationTests { assertThat(registrationBean.getUrlMappings()).contains("/h2-console/*"); assertThat(registrationBean.getInitParameters()).doesNotContainKey("trace"); assertThat(registrationBean.getInitParameters()).doesNotContainKey("webAllowOthers"); + assertThat(registrationBean.getInitParameters()).doesNotContainKey("webAdminPassword"); } @Test @@ -114,13 +115,15 @@ class H2ConsoleAutoConfigurationTests { void customInitParameters() { this.context.register(H2ConsoleAutoConfiguration.class); TestPropertyValues.of("spring.h2.console.enabled:true", "spring.h2.console.settings.trace=true", - "spring.h2.console.settings.webAllowOthers=true").applyTo(this.context); + "spring.h2.console.settings.webAllowOthers=true", "spring.h2.console.settings.webAdminPassword=abcd") + .applyTo(this.context); this.context.refresh(); assertThat(this.context.getBeansOfType(ServletRegistrationBean.class)).hasSize(1); ServletRegistrationBean registrationBean = this.context.getBean(ServletRegistrationBean.class); assertThat(registrationBean.getUrlMappings()).contains("/h2-console/*"); assertThat(registrationBean.getInitParameters()).containsEntry("trace", ""); assertThat(registrationBean.getInitParameters()).containsEntry("webAllowOthers", ""); + assertThat(registrationBean.getInitParameters()).containsEntry("webAdminPassword", "abcd"); } @Test