一、概述
1.关于Spring Cloud Finchley
Spring Cloud Finchley是6月19日Spring官方正式发布GA版本,Finchley.Release支持了Spring Boot2.0,要求起步JDK8,支持JDK9,Finchley版本带了新的子项目,包括对原先版本的子项目的升级,原先支持的组件现在已经全部为2.0.0.Release,并且在官方的版本生命周期公告中说明,Camden release已经到了终止状态,Dalston release将于2018年12月结束,Edgware release将遵循Spring Boot 1.5.x系列的生命周期结束。Spring Boot2.0的新特性本文不再赘述,本文主要介绍Spring Cloud新的开源子项目Spring Cloud Gateway。
2.关于Spring Cloud Gateway
Spring Cloud Gateway是由spring官方基于Spring5.0,Spring Boot2.0,Project Reactor等技术开发的网关,目的是代替原先版本中的Spring Cloud Netfilx Zuul,目前Netfilx已经开源了Zuul2.0,但Spring 没有考虑集成,而是推出了自己开发的Spring Cloud GateWay。该项目提供了一个构建在Spring Ecosystem之上的API网关,旨在提供一种简单而有效的途径来发送API,并向他们提供交叉关注点,例如:安全性,监控/指标和弹性.
二、实践
以下将介绍Spring Cloud Gateway的一些重点功能和扩展方式,关于基础使用不再文中赘述,如有需要请查阅相关文档。
1.自定义GatewayFilter
GatewayFiltery有两种类型的filter,分别为pre和post类型,以下提供一个demo的配置
定义PreGatewayFilter:
public class PreGatewayFilterFactory extends AbstractGatewayFilterFactory {
public PreGatewayFilterFactory() {
super(Config.class);
}
public GatewayFilter apply() {
return apply(o -> {
});
}
@Override
public GatewayFilter apply(Config config) {
// grab configuration from Config object
return (exchange, chain) -> {
//If you want to build a "pre" filter you need to manipulate the
//request before calling change.filter ServerHttpRequest.Builder builder = exchange.getRequest().mutate();
builder.header("GatewayFilter", "PreGatewayFilterFactory success");
//use builder to manipulate the request
return chain.filter(exchange.mutate().request(builder.build()).build());
};
}
public static class Config {
//Put the configuration properties for your filter here
}
}
定义PostGatewayFilter:
public class PostGatewayFilterFactory extends AbstractGatewayF