spring cloud 修改路由转发

spring gateway 修改路由转发

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 filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        Map 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 shortcutFieldOrder() {
        return GatewayFilter.super.shortcutFieldOrder();
    }

    @Override
    public String shortcutFieldPrefix() {
        return GatewayFilter.super.shortcutFieldPrefix();
    }
}

feign 修改转发

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

你可能感兴趣的:(spring cloud 修改路由转发)