使用 seedstack 和 undertow 管理错误处理
Manage error handling with seedstack and undertow
我需要通过设置通用错误消息来管理 HTTP 错误,以便在 HTTP 响应中隐藏服务器端错误。
我正在使用 Seedstack 和嵌入式服务器。我找到了如何使用 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 中发布。
我需要通过设置通用错误消息来管理 HTTP 错误,以便在 HTTP 响应中隐藏服务器端错误。
我正在使用 Seedstack 和嵌入式服务器。我找到了如何使用 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 中发布。