| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | package org.jeecg.filter;import lombok.extern.slf4j.Slf4j;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.util.StringUtils;import org.springframework.web.server.ServerWebExchange;import reactor.core.publisher.Mono;import java.util.Arrays;import java.util.stream.Collectors;import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR;import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.addOriginalRequestUrl;/** * */@Slf4j@Componentpublic class GlobalAccessTokenFilter implements GlobalFilter, Ordered {    public final static String X_ACCESS_TOKEN = "X-Access-Token";    public final static String X_GATEWAY_BASE_PATH = "X_GATEWAY_BASE_PATH";    @Override    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {        String url = exchange.getRequest().getURI().getPath();//        log.info("  access url :  "+ url);        String scheme = exchange.getRequest().getURI().getScheme();        String host = exchange.getRequest().getURI().getHost();        int port = exchange.getRequest().getURI().getPort();        String basePath = scheme + "://" + host + ":" + port;//        log.info(" base path :  "+ basePath);        // 1. 重写StripPrefix(获取真实的URL)        addOriginalRequestUrl(exchange, exchange.getRequest().getURI());        String rawPath = exchange.getRequest().getURI().getRawPath();        String newPath = "/" + Arrays.stream(StringUtils.tokenizeToStringArray(rawPath, "/")).skip(1L).collect(Collectors.joining("/"));        ServerHttpRequest newRequest = exchange.getRequest().mutate().path(newPath).build();        exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, newRequest.getURI());        //将现在的request,添加当前身份        ServerHttpRequest mutableReq = exchange.getRequest().mutate().header("Authorization-UserName", "").header(X_GATEWAY_BASE_PATH,basePath).build();        ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build();        return chain.filter(mutableExchange);    }    @Override    public int getOrder() {        return 0;    }}
 |