Tôi đang chạy một ứng dụng khởi động mùa xuân bên trong một cá thể tomcat độc lập, và tôi đang cố gắng ghi đè lên các trang lỗi. Theo hiểu biết của tôi, Spring cung cấp một bộ lọc ErrorPageFilter cho phép tôi thiết lập các trang lỗi như bình thường đối với Springs EmbeddedServletContainerCustomizer
để xử lý trường hợp này chính xác.Khởi động mùa xuân - trang 404 tùy chỉnh với độc lập tomcat
Vì vậy, tôi có tiêu chuẩn initializer tự động cấu hình/servlet của tôi trong một lớp:
@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude = [ GroovyTemplateAutoConfiguration, SecurityAutoConfiguration, ErrorMvcAutoConfiguration, JmxAutoConfiguration ])
class Application extends SpringBootServletInitializer {
@Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
application.sources(Application)
}
(Tôi đang sử dụng cùng lớp cho tự động cấu hình và servlet init, đó là lý do tôi chỉ cần vượt qua lớp Application
tôi trong cấu hình phương pháp)
Nhìn vào mã nguồn cho SpringBootServletInitializer có vẻ như lớp ErrorPageFilter
đang được thêm bằng cách chỉ cần mở rộng lớp đó tại đây. Tôi đã tắt ErrorMvcAutoConfiguration
- nhưng một lần nữa, nhìn vào mã nguồn đó có vẻ như chỉ là thiết lập các trang lỗi mặc định và không thực sự thiết lập bất cứ điều gì với ErrorPageFilter
.
Sau đó tôi có lỗi tập tin cấu hình của tôi:
@Configuration
class ErrorConfiguration implements EmbeddedServletContainerCustomizer {
@Override public void customize(ConfigurableEmbeddedServletContainer container) {
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/errors/404"))
}
Tuy nhiên, nếu tôi chỉ cần truy cập một URL không hợp lệ, và tôi DispatcherServlet
không thể tìm thấy một trận đấu sau đó tôi chỉ nhận được Tomcats /404.html - không tôi xem liên kết với "/errors/404
" (Tôi có đường dẫn này được ánh xạ tới mẫu xem thymeleaf, hoạt động tốt - nếu tôi điều hướng đến/errors/404 nó hiển thị ok)
Mọi ý tưởng tại sao trang lỗi tùy chỉnh của tôi không hoạt động? truy tìm nhật ký, tôi nhận được một dòng về số ErrorPageFilter
đang được định cấu hình và thiết lập ok khi khởi động ứng dụng, nhưng sau đó không có đề cập nào về bộ lọc làm bất cứ điều gì khi có yêu cầu.
Ví dụ trong tài liệu là với 'EmbeddedServletContainerFactory'. Xem: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-customizing-configurableembeddedservletcontainerfactory-directly –
Tuyệt vời - Tôi đã tìm kiếm tài liệu trong nhiều ngày, không chắc chắn cách tôi bỏ lỡ điều đó! Tôi đã hiểu sai về điểm của lớp ErrorPageFilter rồi sao?Các ý kiến trong mã nguồn/javadoc thực sự làm cho nó nghe như mục đích duy nhất của lớp đó là cho phép các trang lỗi tùy chỉnh trong triển khai WAR độc lập? – rhinds