rm1*_*345 2 spring-boot spring-cloud spring-cloud-netflix
我是Spring Cloud Gateway的新手。
我一直在观看SpringDeveloper频道中的一些youtube视频,并正在处理以下示例:
@Bean
public RouteLocator myRoutes(RouteLocatorBuilder builder) {
return builder.routes()
.route(r -> r.path("/get")
.addRequestHeader("X-SpringOne", "Awesome")
.uri("http://httpbin.org:80"))
.build();
}
Run Code Online (Sandbox Code Playgroud)
在研究Spring Cloud Gateway之前,我还研究过Spring Netflix Zuul。据我所知,在Netflix的Zuul,你可以通过创建一个扩展类创建过滤器ZuulFilter,并把它定义为pre,post,route,等。
但是我想知道如何使用Spring云网关创建PRE / POST过滤器?
任何帮助/建议深表感谢。
谢谢。
对于前置过滤器,这里是AddRequestHeader(代码在chain.filter()调用之前执行):
public class AddRequestHeaderGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory {
@Override
public GatewayFilter apply(NameValueConfig config) {
return (exchange, chain) -> {
ServerHttpRequest request = exchange.getRequest().mutate()
.header(config.getName(), config.getValue())
.build();
return chain.filter(exchange.mutate().request(request).build());
};
}
}
Run Code Online (Sandbox Code Playgroud)
对于“后置”过滤器,这里是SetStatus(代码在中的lambda中运行chain.filter(exchange).then()):
public class SetStatusGatewayFilterFactory extends AbstractGatewayFilterFactory<SetStatusGatewayFilterFactory.Config> {
@Override
public GatewayFilter apply(Config config) {
final HttpStatus status = ServerWebExchangeUtils.parse(config.status);
return (exchange, chain) -> {
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
// check not really needed, since it is guarded in setStatusCode,
// but it's a good example
if (!exchange.getResponse().isCommitted()) {
setResponseStatus(exchange, status);
}
}));
};
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7387 次 |
| 最近记录: |