diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java index 86d9814c75..38bfdf617a 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java @@ -231,10 +231,11 @@ public class ServerProperties { } private String cleanContextPath(String contextPath) { - if (StringUtils.hasText(contextPath) && contextPath.endsWith("/")) { - return contextPath.substring(0, contextPath.length() - 1); + String candidate = StringUtils.trimWhitespace(contextPath); + if (StringUtils.hasText(candidate) && candidate.endsWith("/")) { + return candidate.substring(0, candidate.length() - 1); } - return contextPath; + return candidate; } public String getApplicationDisplayName() { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java index d09db2f56e..28b373677e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2018 the original author or authors. + * Copyright 2012-2019 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. @@ -149,6 +149,32 @@ public class ServerPropertiesTests { assertThat(this.properties.getServlet().getContextPath()).isEqualTo(""); } + @Test + public void testContextPathWithLeadingWhitespace() { + bind("server.servlet.context-path", " /assets"); + assertThat(this.properties.getServlet().getContextPath()).isEqualTo("/assets"); + } + + @Test + public void testContextPathWithTrailingWhitespace() { + bind("server.servlet.context-path", "/assets/copy/ "); + assertThat(this.properties.getServlet().getContextPath()) + .isEqualTo("/assets/copy"); + } + + @Test + public void testContextPathWithLeadingAndTrailingWhitespace() { + bind("server.servlet.context-path", " /assets "); + assertThat(this.properties.getServlet().getContextPath()).isEqualTo("/assets"); + } + + @Test + public void testContextPathWithLeadingAndTrailingWhitespaceAndContextWithSpace() { + bind("server.servlet.context-path", " /assets /copy/ "); + assertThat(this.properties.getServlet().getContextPath()) + .isEqualTo("/assets /copy"); + } + @Test public void testCustomizeUriEncoding() { bind("server.tomcat.uri-encoding", "US-ASCII");