Code review comment: I believe the reason behind `set` was this duplicate issue.  With this PR, we cannot remove a value anymore or decide when we want a single or multiple values of a header (even if I agree that having multiple values of the same header is rarely used, this PR may introduce that case a lot more).

Code under review:
public static void applyFilters(Map<String, FilterConfig> filtersInConfig, Router httpRouteRouter) {
        if (!filtersInConfig.isEmpty()) {
            for (var entry : filtersInConfig.entrySet()) {
                var filterConfig = entry.getValue();
                var matches = filterConfig.matches;
                var order = filterConfig.order.orElse(Integer.MIN_VALUE);
                var methods = filterConfig.methods;
                var headers = filterConfig.header;
                if (methods.isEmpty()) {
                    httpRouteRouter.routeWithRegex(matches)
                            .order(order)
                            .handler(new Handler<RoutingContext>() {
                                @Override
                                public void handle(RoutingContext event) {
                                    event.response().headers().addAll(headers);
                                    event.next();
                                }
                            });
                } else {
                    for (var method : methods.get()) {
                        httpRouteRouter.routeWithRegex(HttpMethod.valueOf(method.toUpperCase(Locale.ROOT)), matches)
                                .order(order)
                                .handler(new Handler<RoutingContext>() {
                                    @Override
                                    public void handle(RoutingContext event) {
                                        event.response().headers().addAll(headers);
                                        event.next();
                                    }
                                });
                    }
                }
            }
        }
    }

Line commented on: event.response().headers().addAll(headers);

Revised code:
public static void applyFilters(Map<String, FilterConfig> filtersInConfig, Router httpRouteRouter) {
        if (!filtersInConfig.isEmpty()) {
            for (var entry : filtersInConfig.entrySet()) {
                var filterConfig = entry.getValue();
                var matches = filterConfig.matches;
                var order = filterConfig.order.orElse(Integer.MIN_VALUE);
                var methods = filterConfig.methods;
                var headers = filterConfig.header;
                if (methods.isEmpty()) {
                    httpRouteRouter.routeWithRegex(matches)
                            .order(order)
                            .handler(new Handler<RoutingContext>() {
                                @Override
                                public void handle(RoutingContext event) {
                                    addFilterHeaders(event, headers);
                                    event.next();
                                }

                            });
                } else {
                    for (var method : methods.get()) {
                        httpRouteRouter.routeWithRegex(HttpMethod.valueOf(method.toUpperCase(Locale.ROOT)), matches)
                                .order(order)
                                .handler(new Handler<RoutingContext>() {
                                    @Override
                                    public void handle(RoutingContext event) {
                                        addFilterHeaders(event, headers);
                                        event.next();
                                    }
                                });
                    }
                }
            }
        }
    }