Allow Boot's Jetty error handler to be overridden

Fixes gh-19520
pull/19776/head
Andy Wilkinson 5 years ago
parent a162c8ac0b
commit 4c8626ea56

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2019 the original author or authors. * Copyright 2012-2020 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -327,9 +327,9 @@ public class JettyServletWebServerFactory extends AbstractServletWebServerFactor
ServletContextInitializer... initializers) { ServletContextInitializer... initializers) {
List<Configuration> configurations = new ArrayList<>(); List<Configuration> configurations = new ArrayList<>();
configurations.add(getServletContextInitializerConfiguration(webAppContext, initializers)); configurations.add(getServletContextInitializerConfiguration(webAppContext, initializers));
configurations.addAll(getConfigurations());
configurations.add(getErrorPageConfiguration()); configurations.add(getErrorPageConfiguration());
configurations.add(getMimeTypeConfiguration()); configurations.add(getMimeTypeConfiguration());
configurations.addAll(getConfigurations());
return configurations.toArray(new Configuration[0]); return configurations.toArray(new Configuration[0]);
} }

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2019 the original author or authors. * Copyright 2012-2020 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -35,8 +35,10 @@ import org.eclipse.jetty.server.SslConnectionFactory;
import org.eclipse.jetty.server.handler.ErrorHandler; import org.eclipse.jetty.server.handler.ErrorHandler;
import org.eclipse.jetty.server.handler.HandlerCollection; import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.server.handler.HandlerWrapper; import org.eclipse.jetty.server.handler.HandlerWrapper;
import org.eclipse.jetty.servlet.ErrorPageErrorHandler;
import org.eclipse.jetty.util.thread.QueuedThreadPool; import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.eclipse.jetty.util.thread.ThreadPool; import org.eclipse.jetty.util.thread.ThreadPool;
import org.eclipse.jetty.webapp.AbstractConfiguration;
import org.eclipse.jetty.webapp.Configuration; import org.eclipse.jetty.webapp.Configuration;
import org.eclipse.jetty.webapp.WebAppContext; import org.eclipse.jetty.webapp.WebAppContext;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -301,4 +303,24 @@ class JettyServletWebServerFactoryTests extends AbstractJettyServletWebServerFac
}); });
} }
@Test
void errorHandlerCanBeOverridden() {
JettyServletWebServerFactory factory = getFactory();
factory.addConfigurations(new AbstractConfiguration() {
@Override
public void configure(WebAppContext context) throws Exception {
context.setErrorHandler(new CustomErrorHandler());
}
});
JettyWebServer jettyWebServer = (JettyWebServer) factory.getWebServer();
WebAppContext context = (WebAppContext) jettyWebServer.getServer().getHandler();
assertThat(context.getErrorHandler()).isInstanceOf(CustomErrorHandler.class);
}
private static class CustomErrorHandler extends ErrorPageErrorHandler {
}
} }

Loading…
Cancel
Save