Ich starte eine Spring-Boot-Anwendung in einer eigenständigen Tomcat-Instanz, und ich versuche, die Fehlerseite zu überschreiben. Aus meiner Sicht bietet Spring einen Filter ErrorPageFilter, der es mir ermöglicht, Fehlerseiten wie für Springs EmbeddedServletContainerCustomizer
nur so einzurichten, um diesen Fall genau zu behandeln.Spring Boot - benutzerdefinierte 404-Seite mit Standalone-Tomcat
So habe ich meine Standard-Auto-Konfiguration/Servlet-Initialisierung in einer Klasse:
@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude = [ GroovyTemplateAutoConfiguration, SecurityAutoConfiguration, ErrorMvcAutoConfiguration, JmxAutoConfiguration ])
class Application extends SpringBootServletInitializer {
@Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
application.sources(Application)
}
(Ich bin die gleiche Klasse für die automatische Konfiguration und Servlet init, weshalb ich gerade meine Application
Klasse in der configure übergeben Methode)
Mit Blick auf den Quellcode für SpringBootServletInitializer sieht es aus wie die ErrorPageFilter
Klasse wird nur durch die Erweiterung dieser Klasse hier hinzugefügt. Ich habe die ErrorMvcAutoConfiguration
ausgeschaltet - aber wieder, mit Blick auf den Quellcode sieht es aus, als ob das nur Standard-Fehlerseiten einstellen und nichts wirklich mit dem ErrorPageFilter
einrichten.
ich dann meine Fehler Config-Datei haben:
@Configuration
class ErrorConfiguration implements EmbeddedServletContainerCustomizer {
@Override public void customize(ConfigurableEmbeddedServletContainer container) {
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/errors/404"))
}
Allerdings, wenn ich eine ungültige URL nur besuchen, und ich DispatcherServlet
kann keine Übereinstimmung finden dann /404.html bekomme ich nur tomcats - nicht mein Ansicht verknüpft mit "/errors/404
" (Ich habe diesen Pfad einer Thymeleflect-Ansichtsvorlage zugeordnet. Das funktioniert einwandfrei. Wenn ich zu/errors/404 navigiere, wird OK angezeigt)
Alle Ideen, warum meine benutzerdefinierte Fehlerseite nicht funktioniert? Verfolgen der Protokolle, bekomme ich eine Zeile über die ErrorPageFilter
wird konfiguriert und Setup ok beim Start der Anwendung, aber dann keine Erwähnung des Filters etwas zu tun, wenn eine Anfrage kommt.
Das Beispiel in der Dokumentation ist mit 'EmbeddedServletContainerFactory'. Siehe: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-customizing-configurableembeddedservletcontainerfactory-directly –
Awesome - Ich habe die Dokumente seit Tagen gesucht, nicht sicher, wie ich verpasst das! Habe ich den Punkt der ErrorPageFilter-Klasse dann falsch verstanden?Die Kommentare im Quellcode/javadoc klingen wirklich so, als ob der einzige Zweck dieser Klasse darin besteht, benutzerdefinierte Fehlerseiten in eigenständigen WAR-Implementierungen zuzulassen? – rhinds