From 3b23c542a04ea1328e5d0b555be06d16d591b2b8 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 9 Dec 2021 12:23:32 +0000 Subject: [PATCH 1/2] Test servlet 3.1 compatibility in deployment tests Closes gh-28906 --- .../spring-boot-deployment-tests/build.gradle | 3 +- .../AbstractDeploymentIntegrationTests.java | 1 + .../Tomcat85DeploymentIntegrationTests.java | 39 +++++++++++++++++++ .../src/main/resources/application.yml | 5 +++ 4 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 spring-boot-tests/spring-boot-deployment-tests/src/intTest/java/sample/Tomcat85DeploymentIntegrationTests.java diff --git a/spring-boot-tests/spring-boot-deployment-tests/build.gradle b/spring-boot-tests/spring-boot-deployment-tests/build.gradle index 38353c5f5f..1befe86f3c 100644 --- a/spring-boot-tests/spring-boot-deployment-tests/build.gradle +++ b/spring-boot-tests/spring-boot-deployment-tests/build.gradle @@ -13,10 +13,11 @@ configurations { } dependencies { + implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-actuator")) + implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-security")) implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-web")) { exclude group: "org.hibernate.validator" } - implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-actuator")) intTestImplementation(enforcedPlatform(project(path: ":spring-boot-project:spring-boot-parent"))) intTestImplementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-test")) diff --git a/spring-boot-tests/spring-boot-deployment-tests/src/intTest/java/sample/AbstractDeploymentIntegrationTests.java b/spring-boot-tests/spring-boot-deployment-tests/src/intTest/java/sample/AbstractDeploymentIntegrationTests.java index d731fdd805..87d1f51074 100644 --- a/spring-boot-tests/spring-boot-deployment-tests/src/intTest/java/sample/AbstractDeploymentIntegrationTests.java +++ b/spring-boot-tests/spring-boot-deployment-tests/src/intTest/java/sample/AbstractDeploymentIntegrationTests.java @@ -95,6 +95,7 @@ abstract class AbstractDeploymentIntegrationTests { TestRestTemplate rest = new TestRestTemplate(new RestTemplateBuilder() .rootUri("http://" + this.container.getHost() + ":" + this.container.getMappedPort(this.port) + "/spring-boot") + .basicAuthentication("test", "test") .requestFactory(() -> new HttpComponentsClientHttpRequestFactory(HttpClients.custom() .setRetryHandler(new StandardHttpRequestRetryHandler(10, false)).build()))); try { diff --git a/spring-boot-tests/spring-boot-deployment-tests/src/intTest/java/sample/Tomcat85DeploymentIntegrationTests.java b/spring-boot-tests/spring-boot-deployment-tests/src/intTest/java/sample/Tomcat85DeploymentIntegrationTests.java new file mode 100644 index 0000000000..f8a1671038 --- /dev/null +++ b/spring-boot-tests/spring-boot-deployment-tests/src/intTest/java/sample/Tomcat85DeploymentIntegrationTests.java @@ -0,0 +1,39 @@ +/* + * Copyright 2012-2021 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package sample; + +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +/** + * Deployment integration tests for Tomcat 8.5 (a Servlet 3.1 container). + * + * @author Andy Wilkinson + */ +@Testcontainers(disabledWithoutDocker = true) +class Tomcat85DeploymentIntegrationTests extends AbstractDeploymentIntegrationTests { + + @Container + static WarDeploymentContainer container = new WarDeploymentContainer("tomcat:8.5.73-jdk8-openjdk", + "/usr/local/tomcat/webapps", DEFAULT_PORT); + + @Override + WarDeploymentContainer getContainer() { + return container; + } + +} diff --git a/spring-boot-tests/spring-boot-deployment-tests/src/main/resources/application.yml b/spring-boot-tests/spring-boot-deployment-tests/src/main/resources/application.yml index 8099f86ce8..9b5ee87fe1 100644 --- a/spring-boot-tests/spring-boot-deployment-tests/src/main/resources/application.yml +++ b/spring-boot-tests/spring-boot-deployment-tests/src/main/resources/application.yml @@ -1 +1,6 @@ +spring: + security: + user: + name: test + password: test management.endpoints.web.exposure.include: '*' From ad754abba33da120975cd273492a069ec972621b Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Fri, 3 Dec 2021 10:33:22 +0200 Subject: [PATCH 2/2] Make ErrorPageSecurityFilter compatible with Servlet 3.1 See gh-28902 --- .../boot/web/servlet/filter/ErrorPageSecurityFilter.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/filter/ErrorPageSecurityFilter.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/filter/ErrorPageSecurityFilter.java index 1140efc8de..9667ff5ce7 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/filter/ErrorPageSecurityFilter.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/filter/ErrorPageSecurityFilter.java @@ -21,6 +21,7 @@ import java.io.IOException; import javax.servlet.DispatcherType; import javax.servlet.Filter; import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletRequest; @@ -54,6 +55,11 @@ public class ErrorPageSecurityFilter implements Filter { this.context = context; } + @Override + public void init(FilterConfig filterConfig) throws ServletException { + // Intentionally blank + } + @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {