拓展spring cloud gateway 动态路由解析及302问题

本文介绍了如何使用Spring Cloud Gateway实现动态路由,以隐藏内网服务并提供反向代理。通过配置示例展示了如何将内网服务的IP和端口映射为公网域名。同时,针对302重定向导致的内网路径问题,提出了解决方案,即修改响应头的location字段,确保重定向指向公网服务路径。
摘要由CSDN通过智能技术生成

1.动态路由 需求:根据指定内网服务的ip和端口信息提供反向代理。

原内网服务是发布到外网上,通过业务逻辑在前端进行整合。后需要将这些内网服务隐藏到主服务之后。

第一版是通过自写的netty进行实现。后改用spring cloud gateway进行实现。以方便后续维护。

实现效果:

  • innerhost1.innerport1.proxy.domain.com 访问 内网服务1、innerhost2.innerport2.proxy.domain.com 访问 内网服务2;
  • innerhost:内网服务地址 innerport 内网服务端口。

eg:127.0.0.1.8080.dev.localhost TO 127.0.0.1:8080

思路:参照gateway lb :RouteToRequestUrlFilter实现。

/**
 * route根据predicates配置进行匹配。因此只要制定符合需求的predicates便可获得对应route及其uri。
 */
RoutePredicateHandlerMapping.lookupRoute(ServerWebExchange exchange):Mono<Route>

/**
 * 在filter中 RouteToRequestUrlFilter将route.uri解析并存储到 ServerWebExchange.getAttributes():GATEWAY_REQUEST_URL_ATTR 中
 因此只要proxyfilter在RouteToRequestUrlFilter之后运行即可直接使用该uri
 */
RouteToRequestUrlFilter.filter(ServerWebExchange exchange, GatewayFilterChain chain):Mono<Void>

实现:

package.component:
@Component
public class ProxyFilter implements GlobalFilter, Ordered {
	@Override
	public in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值