spring cloud gateway globalFilter往header裡面加引數
阿新 • • 發佈:2019-05-07
隨著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; //數字越低優先順序越高
}
}