我正在使用Spring Boot 2.1.5和Spring Cloud Gateway Greenwich.SR1。我试图为我的下游服务创建一个网关,其中之一的工作是为下游请求提供全局错误页面。当下游服务返回HTTP 403响应时,我希望网关提供一个适合的错误页面。目前我正在使用自定义过滤器来实现此功能。请参考如下代码:
我在
问题在于,网关返回了一个403响应,但是内容为空,而不是html文件的内容。在调试期间,我可以看到
有没有其他方法可以让它工作?
public class ForbiddenFilterFactory extends AbstractGatewayFilterFactory<Object> {
@Override
public String name() {
return "Forbidden";
}
@Override
public GatewayFilter apply(Object o) {
return (exchange, chain) -> chain.filter(exchange).then(
Mono.defer(() -> {
if (!exchange.getResponse().isCommitted() &&
HttpStatus.FORBIDDEN.equals(exchange.getResponse().getStatusCode())) {
return Mono.error(new ResponseStatusException(HttpStatus.FORBIDDEN));
}
return Mono.empty();
}));
}
}
我在
src/main/resources/templates/error/
中还有一个名为403.html
的文件。问题在于,网关返回了一个403响应,但是内容为空,而不是html文件的内容。在调试期间,我可以看到
DefaultErrorWebExceptionHandler
已经创建了正确的 body,格式为Mono<ServerResponse>
,但是它从未写入到实际的响应中。有没有其他方法可以让它工作?