SpringCloudGateway 自定义局部过滤器场景分析
场景:
将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务
AllToOneGatewayFilterFactory
import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.s编程pringframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.sphptereotype.Component; @Component @Slf4j public class AllToOneGatewayFilterFactory extends AbstractGatewayFilterFactory<AllToOneGatewayFilterFactory.Config> { public AllToOneGatewayFilterFactory() { super(Config.class); } @Override public GatewayFilter apply(Config config) { return (exchange, chain) -> { ServerHttpRequest request = exchange.getRequest(); request.getURI(); // 替换路径 String path = request.getPath().toString(); ServerHttpRequest modifiedRequest = request.mutate().header(config.headerName, path).path(config.getToPath()).build(); exchange = exchange.mutate().request(modifiedRequest).build(); log.info("AllToOne: headers{{}:{}}, {} ---> {}", config.getHeaderName(),path, request.getURI(), modifiedRequest.getURI()); return chain.filt编程客栈er(exchangehttp://www.devze.com); }; } @Setter @Getter public static class Config { private String headerName; private String toPath; } javascript}
spring: cloud: gateway: httpclient: ssl: useInsecureTrustManager: true routes: - id: AllToOne_fnpt uri: http://localhost:19982 predicates: - Path=/** filters: - name: AllToOne args: headerName: api-path toPath: /api/unified
注意:1.类名必须以GatewayFilterFactory结尾否则会出现不识别 的情况
2.配置的filters -name 的值为类的前缀(截取GatewayFilterFactory之后的)
到此这篇关于SpringCloudGateway 自定义局部过滤器的文章就介绍到这了,更多相关SpringCloudGateway 过滤器内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论