Webflux-移除 X-Forward-For 头部信息
问题
如题
解决方案
@Component
public class RemoveXForwardHeadersFilter implements HttpHeadersFilter, Ordered {
/**
* Headers to remove as the result of applying the filter.
*/
private static final Set<String> FORWARDED_HEADER_NAMES =
Collections.newSetFromMap(new LinkedCaseInsensitiveMap<>(6, Locale.ENGLISH));
static {
FORWARDED_HEADER_NAMES.add("Forwarded");
FORWARDED_HEADER_NAMES.add("X-Forwarded-For");
FORWARDED_HEADER_NAMES.add("X-Forwarded-Host");
FORWARDED_HEADER_NAMES.add("X-Forwarded-Port");
FORWARDED_HEADER_NAMES.add("X-Forwarded-Proto");
FORWARDED_HEADER_NAMES.add("X-Forwarded-Prefix");
FORWARDED_HEADER_NAMES.add("X-Forwarded-Ssl");
}
/**
* order 越大, 优先级越低
*/
private int order = Ordered.LOWEST_PRECEDENCE - 1;
private Set<String> headers = FORWARDED_HEADER_NAMES;
@Override
public int getOrder() {
return order;
}
@Override
public HttpHeaders filter(HttpHeaders input, ServerWebExchange exchange) {
HttpHeaders filtered = new HttpHeaders();
input.entrySet().stream()
.filter(entry -> !this.headers.contains(entry.getKey().toLowerCase()))
.forEach(entry -> filtered.addAll(entry.getKey(), entry.getValue()));
return filtered;
}
@Override
public boolean supports(Type type) {
return type.equals(Type.REQUEST) || type.equals(Type.RESPONSE);
}
}
good luck !