博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring-cloud-gateway之filterFactory
阅读量:2156 次
发布时间:2019-05-01

本文共 3065 字,大约阅读时间需要 10 分钟。

 

StripPrefixGatewayFilterFactory

如果配置  StripPrefix=1,则去掉第1层路径

例子: /first/order/info  则变为 /order/info

spring:  application:    name: geteway  cloud:    gateway:      routes:      # lb 前缀匹配  /secnod/102/echo  /myprefix/102/echo      - id: 102_lb_forward        uri: lb://order-service  # 目标服务地址        predicates:          - Path=/secnod/102/*        filters:          - StripPrefix=1 # 转发之前去掉1层路径 取消 /second          - PrefixPath=/myprefix    # 路径前面会加myprefix  加上/myprefix

 

public GatewayFilter apply(Config config) {		return new GatewayFilter() {			@Override			public Mono
filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); addOriginalRequestUrl(exchange, request.getURI()); String path = request.getURI().getRawPath(); // 去掉最前面1(parts)层路径 String newPath = "/" + Arrays.stream(StringUtils.tokenizeToStringArray(path, "/")) .skip(config.parts).collect(Collectors.joining("/")); newPath += (newPath.length() > 1 && path.endsWith("/") ? "/" : ""); ServerHttpRequest newRequest = request.mutate().path(newPath).build(); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, newRequest.getURI()); return chain.filter(exchange.mutate().request(newRequest).build()); } @Override public String toString() { return filterToStringCreator(StripPrefixGatewayFilterFactory.this) .append("parts", config.getParts()).toString(); } }; }

 

PrefixPathGatewayFilterFactory

/102/echo  会变成  /myprefix/102/echo

把prefix放到路径最前面

属性:PrefixPath

spring:  application:    name: geteway  cloud:    gateway:      routes:      # lb 前缀匹配  /secnod/102/echo  /myprefix/102/echo      - id: 102_lb_forward        uri: lb://order-service  # 目标服务地址        predicates:          - Path=/secnod/102/*        filters:          - StripPrefix=1 # 转发之前去掉1层路径 取消 /second          - PrefixPath=/myprefix    # 路径前面会加myprefix  加上/myprefix
public GatewayFilter apply(Config config) {		return new GatewayFilter() {			@Override			public Mono
filter(ServerWebExchange exchange, GatewayFilterChain chain) { boolean alreadyPrefixed = exchange .getAttributeOrDefault(GATEWAY_ALREADY_PREFIXED_ATTR, false); if (alreadyPrefixed) { return chain.filter(exchange); } exchange.getAttributes().put(GATEWAY_ALREADY_PREFIXED_ATTR, true); ServerHttpRequest req = exchange.getRequest(); addOriginalRequestUrl(exchange, req.getURI()); // 注意这里 把prefix是放到路径最前面的 String newPath = config.prefix + req.getURI().getRawPath(); ServerHttpRequest request = req.mutate().path(newPath).build(); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, request.getURI()); if (log.isTraceEnabled()) { log.trace("Prefixed URI with: " + config.prefix + " -> " + request.getURI()); } return chain.filter(exchange.mutate().request(request).build()); } @Override public String toString() { return filterToStringCreator(PrefixPathGatewayFilterFactory.this) .append("prefix", config.getPrefix()).toString(); } };

 

 

 

 

 

 

 

 

转载地址:http://qkawb.baihongyu.com/

你可能感兴趣的文章
Bagging 简述
查看>>
详解 Stacking 的 python 实现
查看>>
简述极大似然估计
查看>>
用线性判别分析 LDA 降维
查看>>
用 Doc2Vec 得到文档/段落/句子的向量表达
查看>>
使聊天机器人具有个性
查看>>
使聊天机器人的对话更有营养
查看>>
一个 tflearn 情感分析小例子
查看>>
attention 机制入门
查看>>
手把手用 IntelliJ IDEA 和 SBT 创建 scala 项目
查看>>
双向 LSTM
查看>>
GAN 的 keras 实现
查看>>
AI 在 marketing 上的应用
查看>>
Logistic regression 为什么用 sigmoid ?
查看>>
Logistic Regression 为什么用极大似然函数
查看>>
SVM 的核函数选择和调参
查看>>
LightGBM 如何调参
查看>>
用 TensorFlow.js 在浏览器中训练神经网络
查看>>
cs230 深度学习 Lecture 2 编程作业: Logistic Regression with a Neural Network mindset
查看>>
梯度消失问题与如何选择激活函数
查看>>