You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Spring Cloud Gateway实现类似Zuul的简易代理网关?

嘿,刚好我之前也做过类似的需求,用Spring Cloud实现这种伪装成自身服务发起的代理网关,其实用你看到的ProxyExchange控制器方式就很合适,比老的Zuul更加灵活可控。我给你梳理下具体的实现步骤和细节:

1. 先引入必要的依赖

首先得把Spring Cloud Gateway的依赖加进来,它提供了ProxyExchange这个核心的代理工具类。如果是Maven项目,在pom.xml里加:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
2. 编写代理控制器

就是你看到的那种路由方式,我把它补全一下,方便你直接用:

import org.springframework.cloud.gateway.route.ProxyExchange;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Value;

@RestController
public class ThirdPartyProxyController {

    // 把第三方服务地址放到配置文件里,方便后期修改
    @Value("${third-party.base-url}")
    private String thirdPartyBaseUrl;

    @GetMapping("/proxy/path/**")
    public ResponseEntity<?> proxyAllRequests(ProxyExchange<?> proxy) throws Exception {
        // 去掉请求路径里的前缀"/proxy/path/",拿到要转发到第三方的具体路径
        String targetPath = proxy.path("/proxy/path/");
        // 拼接完整的第三方请求地址
        String fullTargetUrl = thirdPartyBaseUrl + targetPath;
        
        // 这里可以加自定义逻辑,比如添加请求头、修改参数、记录日志等
        // 比如给第三方加一个标识头:proxy.header("X-Proxy-Source", "my-service");
        
        // 发起代理请求并返回响应,第三方会认为是你的服务发起的请求
        return proxy.uri(fullTargetUrl).get();
    }
}
3. 配置第三方地址

在application.yml(或application.properties)里配置第三方服务的基础地址:

third-party:
  base-url: https://your-third-party-service.com/
4. 扩展说明
  • 支持多种请求方法:如果需要代理POST、PUT等请求,只需要把@GetMapping改成对应的@PostMapping、@PutMapping,然后把最后一行的.get()改成.post()、.put()即可。
  • 自定义请求处理:在代理之前你可以做任何自定义操作,比如校验请求权限、修改请求参数、添加自定义请求头,甚至根据不同路径转发到不同的第三方服务,这比Zuul的配置式路由灵活很多。
  • 请求头传递:默认情况下ProxyExchange会自动传递大部分请求头(比如Cookie、User-Agent等),如果有不需要传递的头,可以用proxy.removeHeader("Header-Name")移除。

测试的时候,你只需要请求http://你的服务地址/proxy/path/xxx/yyy,这个请求就会被转发到https://your-third-party-service.com/xxx/yyy,第三方服务看到的请求发起方就是你的服务啦。

内容的提问来源于stack exchange,提问作者user5539487

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:49:30