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

升级后Spring Cloud Gateway无法处理编码斜杠(%2F)请求求助

解决Spring Cloud Gateway升级后拒绝含编码斜杠(%2F)请求的问题

问题根源与破坏性变更

  • Spring Cloud Gateway 2023.0.x(Leyton版本)基于Spring Boot 3.2.x,而Spring Boot 3.x开始默认严格遵循RFC 3986规范,拒绝包含编码斜杠(%2F)的请求,这是明确的破坏性变更,目的是提升安全性,规避路径遍历类攻击风险。
  • 另外,Spring Cloud Gateway底层依赖Reactor Netty作为HTTP客户端和Web服务器,而非Tomcat,所以你之前针对Tomcat的WebServerFactoryCustomizer配置完全不生效,这是版本升级后的核心差异点。

解决方案

1. 全局配置(通过配置文件)

在application.yml或application.properties中添加Reactor Netty的配置,全局允许编码斜杠:

YAML格式:

spring:
  cloud:
    gateway:
      httpclient:
        reactor:
          options:
            tcp:
              child:
                allow-encoded-slash: true

Properties格式:

spring.cloud.gateway.httpclient.reactor.options.tcp.child.allow-encoded-slash=true

2. 自定义HttpClient配置(代码方式)

如果需要更灵活的配置逻辑,可以通过自定义HttpClientCustomizer实现:

import org.springframework.cloud.gateway.config.HttpClientCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import reactor.netty.http.client.HttpClient;
import io.netty.channel.ChannelOption;

@Configuration
public class GatewayHttpConfig {

    @Bean
    public HttpClientCustomizer encodedSlashAllowCustomizer() {
        return httpClient -> httpClient.tcpConfiguration(tcpClient ->
                tcpClient.bootstrap(bootstrap -> 
                    bootstrap.childOption(ChannelOption.ALLOW_ENCODED_SLASH, true)
                )
        );
    }
}

3. 针对特定路由开启(更安全)

如果不想全局放宽限制,可以针对特定路由单独配置允许编码斜杠:

spring:
  cloud:
    gateway:
      routes:
        - id: target-service-route
          uri: lb://your-target-service
          predicates:
            - Path=/target-service/**
          metadata:
            allowEncodedSlash: true

注意事项

  • 允许编码斜杠会引入路径遍历攻击风险,建议仅在必要场景开启,同时确保后端服务做好对应的权限校验与路径合法性验证。
  • 升级后需同步关注Spring Boot 3.x的其他兼容性变更,比如Jakarta EE替代Java EE的API调整,避免出现隐性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:18:29