spring-cloud-gateway icon indicating copy to clipboard operation
spring-cloud-gateway copied to clipboard

Redis rate limiter - support for 'Retry-After' response header

Open marosrojis opened this issue 10 months ago • 1 comments

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?

marosrojis avatar Feb 25 '25 09:02 marosrojis

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;
	}
}

JoeCqupt avatar Mar 11 '25 13:03 JoeCqupt