美文网首页
spring cloud 修改路由转发

spring cloud 修改路由转发

作者: pilisiyang | 来源:发表于2022-03-01 13:40 被阅读0次

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<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 修改转发

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 修改路由转发

      本文链接:https://www.haomeiwen.com/subject/arvdrrtx.html