如何在带有嵌入式Jetty的Spring Boot中禁用org.eclipse.jetty.server.error_page.global到/ error的映射

时间:2018-12-13 09:57:53

标签: java spring-boot embedded-jetty

我正在将Spring Boot 2.0.3与Jetty一起使用,我想完全删除错误页面处理程序,因此在出现错误的情况下它会快速失败,不想创建/ error端点,也不想/错误路由失败,另一个404 ...,我尝试过:

使用jettyServerCustomizer,它无法访问正确的属性。

扩展了WebServerFactoryCustomizer,它仅添加错误处理程序,但不能覆盖全局处理程序。

尝试通过“应用程序yml错误”部分进行配置,您无法覆盖默认的/ error配置。

试图覆盖ErrorPageCustomizer Bean ...这是一个没有条件的私有类

还有什么可以做的?

1 个答案:

答案 0 :(得分:0)

“全局错误页面”是Servlet 3.0+的强制性行为,您不能禁用它,只需将其配置为您想要的样子即可。

默认情况下,未默认安装Jetty的“全局错误页面”位置是未定义的,这意味着它将导致由ErrorHandler呈现的默认错误页面。

要配置Servlet 3.0+“全局错误页面”,您将定义一个Web描述符(在您的WEB-INF/web.xml中),以包含一个error-page条目,而无需声明状态代码或异常。

您看到“ / error”这一事实表明您的环境中有意将“全局错误页面”设置为该值。

例如:

<!-- defined as servlet spec global error page -->
<error-page>
    <location>/global-error</location>
</error-page>
<!-- defined by response status code -->
<error-page>
    <error-code>500</error-code>
    <location>/generic-error-on-server</location>
</error-page>
<!-- defined by exception type -->
<error-page>
    <exception-type>java.io.IOException</exception-type>
    <location>/error-in-io</location>
</error-page>

在嵌入式Jetty中,WebAppContext可用于调用getErrorHandler(),它始终至少是一个org.eclipse.jetty.server.handler.ErrorHandler,但也可能是更有用的org.eclipse.jetty.servlet.ErrorPageErrorHandler

如果您收到org.eclipse.jetty.servlet.ErrorPageErrorHandler,请继续致电...

ErrorPageErrorHandler errors = (ErrorPageErrorHandler) webappContext.getErrorHandler();
errors.addErrorPage(ErrorPageErrorHandler.GLOBAL_ERROR_PAGE, "/myglobalerror");

同样,请注意,您不能将其设置为null或为空,也不能将其设置为“我不想设置”的任何其他变体,因为那样仍会导致默认错误页面呈现和行为。