From 1f5344dc27a959648fd74d114ad9403f47ac1de5 Mon Sep 17 00:00:00 2001 From: Jay Choi Date: Tue, 10 Feb 2026 22:46:22 +0900 Subject: [PATCH] Register ErrorPageRegistrarBeanPostProcessor in war deployments Closes gh-49148 Signed-off-by: Jay Choi --- .../support/ErrorPageFilterConfiguration.java | 7 +++++++ .../SpringBootServletInitializerTests.java | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/core/spring-boot/src/main/java/org/springframework/boot/web/servlet/support/ErrorPageFilterConfiguration.java b/core/spring-boot/src/main/java/org/springframework/boot/web/servlet/support/ErrorPageFilterConfiguration.java index d980979368dd..c478dbfc6465 100644 --- a/core/spring-boot/src/main/java/org/springframework/boot/web/servlet/support/ErrorPageFilterConfiguration.java +++ b/core/spring-boot/src/main/java/org/springframework/boot/web/servlet/support/ErrorPageFilterConfiguration.java @@ -18,6 +18,7 @@ import jakarta.servlet.DispatcherType; +import org.springframework.boot.web.error.ErrorPageRegistrarBeanPostProcessor; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -26,6 +27,7 @@ * Configuration for {@link ErrorPageFilter}. * * @author Andy Wilkinson + * @author Jay Choi */ @Configuration(proxyBeanMethods = false) class ErrorPageFilterConfiguration { @@ -43,4 +45,9 @@ FilterRegistrationBean errorPageFilterRegistration(ErrorPageFil return registration; } + @Bean + static ErrorPageRegistrarBeanPostProcessor errorPageRegistrarBeanPostProcessor() { + return new ErrorPageRegistrarBeanPostProcessor(); + } + } diff --git a/core/spring-boot/src/test/java/org/springframework/boot/web/servlet/support/SpringBootServletInitializerTests.java b/core/spring-boot/src/test/java/org/springframework/boot/web/servlet/support/SpringBootServletInitializerTests.java index 5c86176f9220..8c2b756ddb02 100644 --- a/core/spring-boot/src/test/java/org/springframework/boot/web/servlet/support/SpringBootServletInitializerTests.java +++ b/core/spring-boot/src/test/java/org/springframework/boot/web/servlet/support/SpringBootServletInitializerTests.java @@ -41,6 +41,7 @@ import org.springframework.boot.context.logging.LoggingApplicationListener; import org.springframework.boot.testsupport.system.CapturedOutput; import org.springframework.boot.testsupport.system.OutputCaptureExtension; +import org.springframework.boot.web.error.ErrorPageRegistrarBeanPostProcessor; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.ApplicationListener; import org.springframework.context.ConfigurableApplicationContext; @@ -66,6 +67,7 @@ * * @author Phillip Webb * @author Andy Wilkinson + * @author Jay Choi */ @ExtendWith(OutputCaptureExtension.class) class SpringBootServletInitializerTests { @@ -135,6 +137,21 @@ void errorPageFilterRegistrationCanBeDisabled() { } } + @Test + void errorPageRegistrarBeanPostProcessorIsRegistered() { + ServletContext servletContext = mock(ServletContext.class); + given(servletContext.addFilter(any(), any(Filter.class))).willReturn(mock(Dynamic.class)); + given(servletContext.getInitParameterNames()).willReturn(Collections.emptyEnumeration()); + given(servletContext.getAttributeNames()).willReturn(Collections.emptyEnumeration()); + try (AbstractApplicationContext context = (AbstractApplicationContext) new WithErrorPageFilter() + .createRootApplicationContext(servletContext)) { + assertThat(context).isNotNull(); + Map beans = context + .getBeansOfType(ErrorPageRegistrarBeanPostProcessor.class); + assertThat(beans).hasSize(1); + } + } + @Test @SuppressWarnings("rawtypes") void errorPageFilterIsRegisteredWithNearHighestPrecedence() {