Spring Boot-具有独立tomcat的自定义404页面
我在一个独立的tomcat实例中运行一个Spring
Boot应用程序,并且试图覆盖错误页面。据我了解,Spring提供了一个ErrorPageFilter过滤器,该过滤器使我可以像往常一样设置错误页面,以使Springs
EmbeddedServletContainerCustomizer
能够准确地处理这种情况。
所以我在一类中有标准的自动配置/ servlet初始化程序:
@Configuration@ComponentScan
@EnableAutoConfiguration(exclude = [ GroovyTemplateAutoConfiguration, SecurityAutoConfiguration, ErrorMvcAutoConfiguration, JmxAutoConfiguration ] )
class Application extends SpringBootServletInitializer {
@Override protected SpringApplicationBuilder configure( SpringApplicationBuilder application ) {
application.sources( Application )
}
(我在自动配置和servlet初始化中使用同一类,这就是为什么我只Application
在configure方法中传递我的类的原因)
查看SpringBootServletInitializer的源代码,看起来就像ErrorPageFilter
是通过在此处扩展该类来添加该类。我已经关闭ErrorMvcAutoConfiguration
-了,但是再次查看该源代码,似乎只是在设置默认错误页面,而实际上并未使用进行任何设置ErrorPageFilter
。
然后,我有我的错误配置文件:
@Configurationclass ErrorConfiguration implements EmbeddedServletContainerCustomizer {
@Override public void customize( ConfigurableEmbeddedServletContainer container ) {
container.addErrorPages(new ErrorPage( HttpStatus.NOT_FOUND, "/errors/404" ))
}
但是,如果我只是访问一个无效的URL,DispatcherServlet
但找不到匹配项,那么我只会得到tomcats /404.html-
不是我的视图链接到“ /errors/404
”(我将此路径映射到thymeleaf视图模板,可以正常工作-如果我导航到/ errors /
404,它将显示确定)
有什么想法为什么我的自定义错误页面不起作用?跟踪日志,我得到了有关ErrorPageFilter
在应用程序启动时进行配置和设置的信息,但是没有提及当请求传入时过滤器会做任何事情。
回答:
您可以将以下代码用于旧版本的Spring Boot(0.5.x)
public class ServerCustomization extends ServerProperties { @Override
public void customize(ConfigurableEmbeddedServletContainerFactory factory) {
super.customize(factory);
factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,
"/yourpath/error-not-found.jsp"));
factory.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR,
"/yourpath/error-internal.jsp"));
factory.addErrorPages(new ErrorPage("/yourpath/error-other.jsp"));
}
}
较新的spring启动版本(1.X.RELEASE)围绕ServerProperty进行了一些重构。见下文,
public class ServerCustomization extends ServerProperties { @Override
public void customize(ConfigurableEmbeddedServletContainer container) {
super.customize(container);
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,
"/jsp/404.jsp"));
container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR,
"/jsp/500.jsp"));
container.addErrorPages(new ErrorPage("/jsp/error.jsp"));
}
}
然后定义一个bean注入ServerProperies。
@Beanpublic ServerProperties getServerProperties() {
return new ServerCustomization();
}
样本项目发布在git中
非常重要:如果使用maven进行构建,则必须将所有资源文件存储在src / main /
resources文件夹下。否则,maven不会将这些文件添加到最终的jar工件中。
以上是 Spring Boot-具有独立tomcat的自定义404页面 的全部内容, 来源链接: utcz.com/qa/428937.html