Używam aplikacji Spring boot wewnątrz autonomicznej instancji tomcat i próbuję przesłonić strony błędów. Z mojego rozumowania Spring dostarcza filtr ErrorPageFilter, który pozwala mi po prostu skonfigurować strony błędów tak, jak zwykle dla Springs EmbeddedServletContainerCustomizer
, aby dokładnie obsłużyć tę sprawę.Spring Boot - niestandardowa strona 404 z autonomicznym tomcatem
Więc mam standardowej automatycznej konfiguracji/servlet inicjatora w jednej klasie:
@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude = [ GroovyTemplateAutoConfiguration, SecurityAutoConfiguration, ErrorMvcAutoConfiguration, JmxAutoConfiguration ])
class Application extends SpringBootServletInitializer {
@Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
application.sources(Application)
}
(używam tej samej klasy dla autokonfiguracji i serwletów init, dlatego też po prostu przekazać moje Application
klasę w configure metoda)
Patrząc na kod źródłowy dla SpringBootServletInitializer wygląda na to, że klasa ErrorPageFilter
jest dodawana przez rozszerzenie tej klasy tutaj. Wyłączyłem ErrorMvcAutoConfiguration
- ale ponownie, patrząc na ten kod źródłowy, wygląda to tak, że po prostu ustawiasz domyślne strony błędów i nie ustawiasz niczego z ErrorPageFilter
.
I wtedy mój błąd konfiguracyjny plik:
@Configuration
class ErrorConfiguration implements EmbeddedServletContainerCustomizer {
@Override public void customize(ConfigurableEmbeddedServletContainer container) {
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/errors/404"))
}
Jednakże, jeśli po prostu odwiedzić nieprawidłowy adres URL, a ja nie mogę znaleźć DispatcherServlet
mecz potem po prostu kocury /404.html - nie mój widok powiązany z "/errors/404
" (Mam tę ścieżkę zmapowaną do szablonu widoku thymeleaf, który działa poprawnie - jeśli nawiguję do/errors/404 to wyświetla się poprawnie)
Jakieś pomysły, dlaczego moja niestandardowa strona błędu nie działa? śledzenie dzienników, otrzymuję komunikat o tym, że ErrorPageFilter
jest skonfigurowany i skonfigurowany poprawnie po uruchomieniu aplikacji, ale bez wzmianki o tym, że filtr robi cokolwiek, gdy przychodzi żądanie.
Przykładem w dokumencie jest "EmbeddedServletContainerFactory". Zobacz: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-customizing-configurableembeddedservletcontainerfactory-directly –
Niesamowite - od dawna szukam dokumentów, nie wiem jak tęskniłem! Czy źle zrozumiałem punkt klasy ErrorPageFilter?Komentarze w kodzie źródłowym/javadoc naprawdę brzmią, jakby jedynym celem tej klasy było dopuszczenie niestandardowych stron błędów w samodzielnych wdrożeniach WAR? – rhinds