Browse Source

Polish "Allow Undertow's options to be configured via the environment

See gh-17356
pull/17431/head
Madhura Bhave 7 years ago
parent
commit
3bd7760f9c
  1. 10
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/UndertowWebServerFactoryCustomizer.java
  2. 11
      spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/embedded/UndertowWebServerFactoryCustomizerTests.java

10
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/UndertowWebServerFactoryCustomizer.java

@ -142,12 +142,12 @@ public class UndertowWebServerFactoryCustomizer @@ -142,12 +142,12 @@ public class UndertowWebServerFactoryCustomizer
return this.serverProperties.getForwardHeadersStrategy().equals(ServerProperties.ForwardHeadersStrategy.NATIVE);
}
@SuppressWarnings("unchecked")
private <T> void setCustomOption(ConfigurableUndertowWebServerFactory factory, String key, String value,
String type) {
Field[] fields = UndertowOptions.class.getDeclaredFields();
for (Field field : fields) {
String name = getLetterAndNumber(key);
if (getLetterAndNumber(field.getName()).equals(name)) {
if (getCanonicalName(field.getName()).equals(getCanonicalName(key))) {
Option<T> option = (Option<T>) Option.fromString(
UndertowOptions.class.getName() + '.' + field.getName(), getClass().getClassLoader());
T parsed = option.parseValue(value, getClass().getClassLoader());
@ -162,9 +162,9 @@ public class UndertowWebServerFactoryCustomizer @@ -162,9 +162,9 @@ public class UndertowWebServerFactoryCustomizer
}
}
private String getLetterAndNumber(String name) {
StringBuilder canonicalName = new StringBuilder(name.length());
name.chars().map((c) -> (char) c).filter(Character::isLetterOrDigit).map(Character::toLowerCase)
private String getCanonicalName(String key) {
StringBuilder canonicalName = new StringBuilder(key.length());
key.chars().map((c) -> (char) c).filter(Character::isLetterOrDigit).map(Character::toLowerCase)
.forEach((c) -> canonicalName.append((char) c));
return canonicalName.toString();
}

11
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/embedded/UndertowWebServerFactoryCustomizerTests.java

@ -161,12 +161,23 @@ class UndertowWebServerFactoryCustomizerTests { @@ -161,12 +161,23 @@ class UndertowWebServerFactoryCustomizerTests {
assertThat(boundServerOption(UndertowOptions.ALWAYS_SET_KEEP_ALIVE)).isFalse();
}
@Test
void customServerOptionShouldBeRelaxed() {
bind("server.undertow.options.server.always-set-keep-alive=false");
assertThat(boundServerOption(UndertowOptions.ALWAYS_SET_KEEP_ALIVE)).isFalse();
}
@Test
void customSocketOption() {
bind("server.undertow.options.socket.ALWAYS_SET_KEEP_ALIVE=false");
assertThat(boundSocketOption(UndertowOptions.ALWAYS_SET_KEEP_ALIVE)).isFalse();
}
void customSocketOptionShouldBeRelaxed() {
bind("server.undertow.options.socket.always-set-keep-alive=false");
assertThat(boundSocketOption(UndertowOptions.ALWAYS_SET_KEEP_ALIVE)).isFalse();
}
@Test
void deduceUseForwardHeaders() {
this.environment.setProperty("DYNO", "-");

Loading…
Cancel
Save