spring-cloud-gateway
spring-cloud-gateway copied to clipboard
Redis rate limiter - support for 'Retry-After' response header
I would like to set header 'Retry-After' in the response header when the request is refused by Redis rate limiter.
I tried to implement own filter to add 'Retry-After' header. But unfortunately the request is finished using setCompleted() method in the RequestRateLimiterGatewayFilterFactory.
Is there any way how to set the header Retry-After please?
Perhaps you can extends the existing limiter.
public class MyCustomRateLimiter extends RedisRateLimiter {
@Override
public Mono<Response> isAllowed(String routeId, String id) {
return super.isAllowed(routeId, id).map( response -> {
if (!response.isAllowed()) {
return new Response(response.isAllowed(), generateHeaders(response.getHeaders()));
}
return response;
});
}
private Map<String, String> generateHeaders(Map<String, String> headers) {
// todo: add Headers
return headers;
}
}