spring gateway 修改路由轉(zhuǎn)發(fā)
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter;
import org.springframework.cloud.gateway.route.Route;
import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
import java.util.Map;
@Slf4j
@Component
public class BackendFilter implements GlobalFilter, Ordered, GatewayFilter {
@Override
public int getOrder() {
return RouteToRequestUrlFilter.ROUTE_TO_URL_FILTER_ORDER + 1;
}
@SneakyThrows
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
Map<String, Object> attributes = exchange.getAttributes();
Route route = (Route) attributes.get(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
log.info("Route:{}", route);
String uri = route.getUri().toString();
try {
attributes.put(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR, new URI(uri));
} catch (URISyntaxException e) {
e.printStackTrace();
}
return chain.filter(exchange);
}
@Override
public ShortcutType shortcutType() {
return GatewayFilter.super.shortcutType();
}
@Override
public List<String> shortcutFieldOrder() {
return GatewayFilter.super.shortcutFieldOrder();
}
@Override
public String shortcutFieldPrefix() {
return GatewayFilter.super.shortcutFieldPrefix();
}
}
feign 修改轉(zhuǎn)發(fā)
import feign.RequestInterceptor;
import feign.RequestTemplate;
import feign.Target;
import java.util.Optional;
public class ContextRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
Target<?> target = requestTemplate.feignTarget();
String name = target.name();
String url = target.url();
// 修改url
requestTemplate.target(url);
}
}