error-handling - 使用Seedstack和Undertow管理错误处理

标签 error-handling undertow seedstack

我需要通过设置通用错误消息来管理HTTP错误,以便在HTTP响应中隐藏服务器端错误。

我正在使用Seedstack和嵌入式服务器undertow。我已经找到了如何使用HttpHandler管理错误,但是我还没有发现如何将此错误处理程序集成到SeedStack中。

我的SimpleErrorPageHandler

public class SimpleErrorPageHandler implements HttpHandler {

    private final HttpHandler next;

    public SimpleErrorPageHandler(final HttpHandler next) {
        this.next = next;
    }

    @Override
    public void handleRequest(final HttpServerExchange exchange) throws Exception {
        exchange.addDefaultResponseListener(exchange1 -> {
            if (!exchange1.isResponseChannelAvailable()) {
                return false;
            }
            if (exchange1.getStatusCode() == 500) {
                final String errorPage = "<html><head><title>Error</title></head><body>Internal Error</body></html>";
                exchange1.getResponseHeaders().put(Headers.CONTENT_LENGTH, "" + errorPage.length());
                exchange1.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/html");
                Sender sender = exchange1.getResponseSender();
                sender.send(errorPage);
                return true;
            }
            return false;
        });
        next.handleRequest(exchange);
    }
}

最佳答案

当前版本的SeedStack不允许定义自定义的Undertow HTTP处理程序。只有用于servlet支持的HTTP处理程序是硬编码的。我们计划将来引入the capability

但是,关于您的问题,我们just merged可以为特定的HTTP状态代码或异常指定错误页面,以及默认错误页面。这样可以完成:

web:
  server:
    errorPages:
      - location: /errors/404.html
        errorCode: 404
      - location: /errors/415.html
        errorCode: 415
      - location: /errors/default.html

该功能将在7月底发布的SeedStack 19.7中发布。

关于error-handling - 使用Seedstack和Undertow管理错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56700330/

相关文章:

Java错误处理

vba - 是什么导致 Worksheet_Activate 出现 "Automation error Unspecified error"?

java:在调度程序内对 lambda 表达式进行单元测试

java - 带有 undertow servlet 容器的 spring-boot 应用程序中的 "no cipher suites in common"错误

java - Undertow + CompletableFuture/RxJava

java - Seedstack 中的存储库和查找器有什么区别?

java - 如何在seedstack中使用Group By?

.net - 错误记录和异常通知库

php - 试图获取非对象Laravel PHP 5.8的属性 'cname'