Sto eseguendo un'applicazione di avvio Spring all'interno di un'istanza di tomcat indipendente e sto tentando di ignorare le pagine di errore. Dalla mia comprensione, Spring fornisce un filtro ErrorPageFilter che mi consente di impostare semplicemente le pagine di errore come normale per le molle EmbeddedServletContainerCustomizer
per gestire esattamente questo caso.Spring Boot - pagina 404 personalizzata con tomcat autonomo
così ho il mio standard di inizializzazione automatica di configurazione/servlet in una classe:
@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude = [ GroovyTemplateAutoConfiguration, SecurityAutoConfiguration, ErrorMvcAutoConfiguration, JmxAutoConfiguration ])
class Application extends SpringBootServletInitializer {
@Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
application.sources(Application)
}
(sto usando la stessa classe per l'autoconfigurazione e servlet init, che è il motivo per cui ho appena passo la mia classe Application
nel configure metodo)
Guardando il codice sorgente per SpringBootServletInitializer sembra che la classe ErrorPageFilter
venga aggiunta semplicemente estendendo quella classe qui. Ho disattivato lo ErrorMvcAutoConfiguration
, ma ancora una volta, guardando a quel codice sorgente, sembra che si stiano semplicemente impostando le pagine di errore predefinite e non impostando effettivamente nulla con lo ErrorPageFilter
.
Poi ho il mio errore file di configurazione:
@Configuration
class ErrorConfiguration implements EmbeddedServletContainerCustomizer {
@Override public void customize(ConfigurableEmbeddedServletContainer container) {
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/errors/404"))
}
Tuttavia, se mi basta visitare un URL non valido, e io DispatcherServlet
non riesco a trovare una corrispondenza, allora ottengo solo tomcats /404.html - non la mia vista collegata a "/errors/404
" (Ho questo percorso mappato a un modello di vista in tilt, che funziona bene - se navigo in/errors/404 visualizza ok)
Qualche idea perché la mia pagina di errore personalizzata non funziona? tracciando i registri, ottengo una riga su ErrorPageFilter
configurata e configurata ok all'avvio dell'applicazione, ma poi nessuna menzione del filtro fa nulla quando arriva una richiesta.
L'esempio nei documenti è con 'EmbeddedServletContainerFactory'. Vedi: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-customizing-configurableembeddedservletcontainerfactory-directly –
Impressionante - Ho cercato i documenti per giorni, non sono sicuro di come perso questo! Ho frainteso il punto della classe ErrorPageFilter allora?I commenti nel codice sorgente/javadoc rendono davvero il suono come l'unico scopo di quella classe è quello di consentire pagine di errore personalizzate nelle distribuzioni di WAR standalone? – rhinds