Merge branch '2.3.x'

Closes gh-23205
pull/23215/head
Andy Wilkinson 4 years ago
commit 9bf6e1ceda

@ -43,7 +43,6 @@ import org.springframework.boot.web.server.ErrorPage;
import org.springframework.boot.web.server.ErrorPageRegistrar; import org.springframework.boot.web.server.ErrorPageRegistrar;
import org.springframework.boot.web.server.ErrorPageRegistry; import org.springframework.boot.web.server.ErrorPageRegistry;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.util.ClassUtils; import org.springframework.util.ClassUtils;
import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.util.NestedServletException; import org.springframework.web.util.NestedServletException;
@ -62,8 +61,7 @@ import org.springframework.web.util.NestedServletException;
* @author Andy Wilkinson * @author Andy Wilkinson
* @since 2.0.0 * @since 2.0.0
*/ */
@Order(Ordered.HIGHEST_PRECEDENCE + 1) public class ErrorPageFilter implements Filter, ErrorPageRegistry, Ordered {
public class ErrorPageFilter implements Filter, ErrorPageRegistry {
private static final Log logger = LogFactory.getLog(ErrorPageFilter.class); private static final Log logger = LogFactory.getLog(ErrorPageFilter.class);
@ -298,6 +296,11 @@ public class ErrorPageFilter implements Filter, ErrorPageRegistry {
public void destroy() { public void destroy() {
} }
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE + 1;
}
private static void addClassIfPresent(Collection<Class<?>> collection, String className) { private static void addClassIfPresent(Collection<Class<?>> collection, String className) {
try { try {
collection.add(ClassUtils.forName(className, null)); collection.add(ClassUtils.forName(className, null));

@ -38,6 +38,7 @@ class ErrorPageFilterConfiguration {
@Bean @Bean
FilterRegistrationBean<ErrorPageFilter> errorPageFilterRegistration(ErrorPageFilter filter) { FilterRegistrationBean<ErrorPageFilter> errorPageFilterRegistration(ErrorPageFilter filter) {
FilterRegistrationBean<ErrorPageFilter> registration = new FilterRegistrationBean<>(filter); FilterRegistrationBean<ErrorPageFilter> registration = new FilterRegistrationBean<>(filter);
registration.setOrder(filter.getOrder());
registration.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ASYNC); registration.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ASYNC);
return registration; return registration;
} }

@ -47,6 +47,7 @@ import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.core.Ordered;
import org.springframework.core.env.PropertySource; import org.springframework.core.env.PropertySource;
import org.springframework.mock.web.MockServletContext; import org.springframework.mock.web.MockServletContext;
import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.WebApplicationContext;
@ -133,6 +134,27 @@ class SpringBootServletInitializerTests {
} }
} }
@Test
@SuppressWarnings("rawtypes")
void errorPageFilterIsRegisteredWithNearHighestPrecedence() {
WebServer webServer = new UndertowServletWebServerFactory(0).getWebServer((servletContext) -> {
try (AbstractApplicationContext context = (AbstractApplicationContext) new WithErrorPageFilter()
.createRootApplicationContext(servletContext)) {
Map<String, FilterRegistrationBean> registrations = context
.getBeansOfType(FilterRegistrationBean.class);
assertThat(registrations).hasSize(1);
FilterRegistrationBean errorPageFilterRegistration = registrations.get("errorPageFilterRegistration");
assertThat(errorPageFilterRegistration.getOrder()).isEqualTo(Ordered.HIGHEST_PRECEDENCE + 1);
}
});
try {
webServer.start();
}
finally {
webServer.stop();
}
}
@Test @Test
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
void errorPageFilterIsRegisteredForRequestAndAsyncDispatch() { void errorPageFilterIsRegisteredForRequestAndAsyncDispatch() {

Loading…
Cancel
Save