随着spring cloud版本的更新,现现在Spring cloud gateway已经替代zuul来实现路由转发,拦截的功能了。java
使用方法,只有实现GlobalFilter便可,由于业务须要,拦截全部通过api gateway的api,并验证其token是否合法,而后进行返回401或者继续转发到其余的微服务,但须要将token解析并将解析出的user放到header中转发下去。spring
使用方式:api
@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"); if (token == null||token.isEmpty()){ //若是token不合法,直接返回401 exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED); return exchange.getResponse().setComplete(); } //向headers中放文件,记得build ServerHttpRequest request = exchange.getRequest().mutate().header("X-User", "guanguan").build(); //将如今的request 变成 exchange对象 return chain.filter(exchange.mutate().request(request).build()); } @Override public int getOrder() { return -200; //数字越低优先级越高 } }