import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import java.net.URI;
@Component
public class ModifyRequestGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 获取原始请求
ServerHttpRequest request = exchange.getRequest();
// 修改请求路径,例如添加一个路径片段
String modifiedPath = request.getPath().pathWithinApplication()
.value() + "/modified";
// 构建新的请求
ServerHttpRequest newRequest = request.mutate()
.path(modifiedPath)
.build();
// 返回修改后的请求
return chain.filter(exchange.mutate().request(newRequest).build());
}
@Override
public int getOrder() {
// 确保此全局过滤器在其他过滤器之前运行
return -1;
}
}
https://github.com/spring-cloud/spring-cloud-gateway/issues/59
public class HeaderFilterFactory implements WebFilterFactory {
@Override
public WebFilter apply(Tuple args) {
return (exchange, chain) -> {
ServerHttpRequest request = exchange.getRequest().mutate().build();
request.getHeaders().add("Connection", "Upgrade");
request.getHeaders().add("Upgrade", "websocket");
request.getHeaders().add("Sec-WebSocket-Protocol", "base64.channel.k8s.io");
return chain.filter(exchange.mutate().request(request).build());
};
}
}