Merge pull request #21533 from RadekKoubsky

* pr/21533:
  Polish "Add support for webAdminPassword property of H2 Console"
  Add support for webAdminPassword property of H2 Console

Closes gh-21533
pull/21936/head
Stephane Nicoll 4 years ago
commit ac0f175c57

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; 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.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean;
@ -62,13 +63,7 @@ public class H2ConsoleAutoConfiguration {
String path = properties.getPath(); String path = properties.getPath();
String urlMapping = path + (path.endsWith("/") ? "*" : "/*"); String urlMapping = path + (path.endsWith("/") ? "*" : "/*");
ServletRegistrationBean<WebServlet> registration = new ServletRegistrationBean<>(new WebServlet(), urlMapping); ServletRegistrationBean<WebServlet> registration = new ServletRegistrationBean<>(new WebServlet(), urlMapping);
H2ConsoleProperties.Settings settings = properties.getSettings(); configureH2ConsoleSettings(registration, properties.getSettings());
if (settings.isTrace()) {
registration.addInitParameter("trace", "");
}
if (settings.isWebAllowOthers()) {
registration.addInitParameter("webAllowOthers", "");
}
dataSource.ifAvailable((available) -> { dataSource.ifAvailable((available) -> {
try (Connection connection = available.getConnection()) { try (Connection connection = available.getConnection()) {
logger.info("H2 console available at '" + path + "'. Database available at '" logger.info("H2 console available at '" + path + "'. Database available at '"
@ -81,4 +76,16 @@ public class H2ConsoleAutoConfiguration {
return registration; return registration;
} }
private void configureH2ConsoleSettings(ServletRegistrationBean<WebServlet> registration, Settings settings) {
if (settings.isTrace()) {
registration.addInitParameter("trace", "");
}
if (settings.isWebAllowOthers()) {
registration.addInitParameter("webAllowOthers", "");
}
if (settings.getWebAdminPassword() != null) {
registration.addInitParameter("webAdminPassword", settings.getWebAdminPassword());
}
}
} }

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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; private boolean webAllowOthers = false;
/**
* Password to access preferences and tools of H2 Console.
*/
private String webAdminPassword;
public boolean isTrace() { public boolean isTrace() {
return this.trace; return this.trace;
} }
@ -93,6 +98,14 @@ public class H2ConsoleProperties {
this.webAllowOthers = webAllowOthers; this.webAllowOthers = webAllowOthers;
} }
public String getWebAdminPassword() {
return this.webAdminPassword;
}
public void setWebAdminPassword(String webAdminPassword) {
this.webAdminPassword = webAdminPassword;
}
} }
} }

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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.getUrlMappings()).contains("/h2-console/*");
assertThat(registrationBean.getInitParameters()).doesNotContainKey("trace"); assertThat(registrationBean.getInitParameters()).doesNotContainKey("trace");
assertThat(registrationBean.getInitParameters()).doesNotContainKey("webAllowOthers"); assertThat(registrationBean.getInitParameters()).doesNotContainKey("webAllowOthers");
assertThat(registrationBean.getInitParameters()).doesNotContainKey("webAdminPassword");
} }
@Test @Test
@ -114,13 +115,15 @@ class H2ConsoleAutoConfigurationTests {
void customInitParameters() { void customInitParameters() {
this.context.register(H2ConsoleAutoConfiguration.class); this.context.register(H2ConsoleAutoConfiguration.class);
TestPropertyValues.of("spring.h2.console.enabled:true", "spring.h2.console.settings.trace=true", 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(); this.context.refresh();
assertThat(this.context.getBeansOfType(ServletRegistrationBean.class)).hasSize(1); assertThat(this.context.getBeansOfType(ServletRegistrationBean.class)).hasSize(1);
ServletRegistrationBean<?> registrationBean = this.context.getBean(ServletRegistrationBean.class); ServletRegistrationBean<?> registrationBean = this.context.getBean(ServletRegistrationBean.class);
assertThat(registrationBean.getUrlMappings()).contains("/h2-console/*"); assertThat(registrationBean.getUrlMappings()).contains("/h2-console/*");
assertThat(registrationBean.getInitParameters()).containsEntry("trace", ""); assertThat(registrationBean.getInitParameters()).containsEntry("trace", "");
assertThat(registrationBean.getInitParameters()).containsEntry("webAllowOthers", ""); assertThat(registrationBean.getInitParameters()).containsEntry("webAllowOthers", "");
assertThat(registrationBean.getInitParameters()).containsEntry("webAdminPassword", "abcd");
} }
@Test @Test

Loading…
Cancel
Save