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

Spring Cloud Gateway:如何重定向到其他主机并保留请求路径

解决Spring Cloud Gateway Redirect过滤器丢失请求路径的问题

你当前的问题在于redirect过滤器的目标URL是固定根地址,没有保留原请求的路径部分。Spring Cloud Gateway的redirect过滤器支持内置占位符来动态拼接请求路径,具体解决方法如下:

修改Redirect过滤器配置

将redirect方法的目标URL改为包含{path}占位符的形式,该占位符会自动替换为原请求的路径部分:

@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
    String auth = username + ":" + password;
    String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes());
    
    return builder.routes()
            .route("geoApi", r -> r
                    .path("/site/rest/services/**")
                    .filters(f -> {
                        f.setRequestHeader(HttpHeaders.AUTHORIZATION, "Basic " + encodedAuth);
                        // 使用{path}占位符保留原请求路径
                        f.redirect(302, "https://internal-api.com{path}");
                        return f;
                    })
                    .uri("https://internal-api.com"))
            .build();
}

额外说明

  • 如果原请求包含查询参数(比如http://localhost:8080/site/rest/services/testservice/1?id=123),想要保留查询参数的话,可以在目标URL后添加{query}占位符:
    f.redirect(302, "https://internal-api.com{path}{query}");
    
  • 注意:302重定向是客户端发起新请求,此时你设置的Authorization请求头不会被携带到新请求中。如果需要在代理过程中传递认证信息,可能需要考虑使用RewritePath过滤器结合反向代理(而非重定向),具体取决于你的业务需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:35:28