Spring Cloud Gateway网关获取路由转发后的真实地址
Spring Cloud Gateway网关获取路由转发后的真实地址。在使用 Spring Cloud Gateway 时,我们可能需要获取路由转发后的地址(注意,这里的地址不是请求到网关的地址,是网关路由转发后的真实地址),下面通过代码演示如何在 filter 中获取路由转发后的地址。
·
在使用 Spring Cloud Gateway 时,我们可能需要获取路由转发后的地址(注意,这里的地址不是请求到网关的地址,是网关路由转发后的真实地址),下面通过代码演示如何在 filter 中获取路由转发后的地址。
核心代码是 Route route = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
获取路由 route,然后才可以获取 route 的 uri(即配置文件中配置的 route 的 uri)
配置文件
spring:
application:
name: api-gateway
cloud:
gateway:
routes:
- id: path_route
uri: http://127.0.0.1:8001
predicates:
- Path=/api/**
代码
实现全局过滤器 GlobalFilter
@Component
public class MyGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 获得路由
Route route = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
// 配置文件中配置的route的uri属性(匹配到的route),本例中是http://127.0.0.1:8001
String uri = route.getUri().toString();
ServerHttpRequest request = exchange.getRequest();
// 请求路径中域名之后的部分,本例中是/api/name/get
String path = request.getPath().toString();
// 转发后的完整地址,本例中是http://127.0.0.1:8001/api/name/get
String address = uri + path;
System.out.println("uri: " + uri);
System.out.println("path: " + path);
System.out.println("转发后的完整地址 address: " + address);
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
}
结果
网关地址:http://127.0.0.1:8090
请求地址:http://127.0.0.1:8090/api/name/get
想要访问接口的真实地址:http://127.0.0.1:8001/api/name/get
以下是代码的执行结果:
uri: http://127.0.0.1:8001
path: /api/name/get
转发后的完整地址 address: http://127.0.0.1:8001/api/name/get
成功拿到路由转发后的地址
如果有帮助的话,可以点个赞支持一下嘛
🙏
更多推荐
已为社区贡献1条内容
所有评论(0)