1. 程式人生 > >spring cloud gateway globalFilter往header裡面加引數

spring cloud gateway globalFilter往header裡面加引數

隨著spring cloud版本的更新,現如今Spring cloud gateway已經替代zuul來實現路由轉發,攔截的功能了。

使用方法,只有實現GlobalFilter即可,因為業務需要,攔截所有經過api gateway的api,並驗證其token是否合法,然後進行返回401或者繼續轉發到其他的微服務,但需要將token解析並將解析出的user放到header中轉發下去。

使用方式:

@Component
public class AuthSignatureFilter implements GlobalFilter, Ordered {
 
    static Logger logger = LoggerFactory.getLogger(AuthSignatureFilter.class);
 
    /**
     * 全域性過濾器 核心方法
     * @param exchange
     * @param chain
     * @return
     */
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        logger.info("request = {}",JSONArray.toJSONString( exchange.getRequest()) );
        String token = exchange.getRequest().getQueryParams().getFirst("Authroization");
        //向headers中放檔案,記得build
        ServerHttpRequest host = exchange.getRequest().mutate().header("X-User", "guanguan").build();
        //將現在的request 變成 change物件 
        ServerWebExchange build = exchange.mutate().request(host).build();
        return chain.filter(build);
    }


 

    @Override
    public int getOrder() {
        return -200;  //數字越低優先順序越高
    }
}