ForwardedHeaderFilter 不再支持 IPv6

ForwardedHeaderFilter no longer support IPv6

升级 spring 引导依赖项后,spring 引导应用程序仅适用于 ipv4,但对 ipv6 会抛出错误。该应用程序部署在 google 云 运行 服务上。当前版本:

      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>spring-cloud-gcp-dependencies</artifactId>
        <version>2.0.3</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.9</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

错误:

java.lang.IllegalArgumentException: Invalid IPv4 address: 2409:4042:2319:a971:c4db:4661:939c:443b
    at org.springframework.web.util.UriComponentsBuilder.parseForwardedFor(UriComponentsBuilder.java:363)
    at org.springframework.web.filter.ForwardedHeaderFilter$ForwardedHeaderExtractingRequest.<init>(ForwardedHeaderFilter.java:246)
    at org.springframework.web.filter.ForwardedHeaderFilter.doFilterInternal(ForwardedHeaderFilter.java:149)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)

我找到了类似的问题,但没有找到任何解决方案。 https://github.com/spring-projects/spring-framework/issues/26748

代码中抛出错误的行 https://github.com/spring-projects/spring-framework/blob/6c68419073b43fb29114a3af4e402c729084ed84/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java#L363

问题是由于 google 云 运行 服务不遵守 RFC7239 标准而不是由于 spring 引导。云 运行 无法用引号和方括号括起 IPv6 地址(根据 RFC7239 标准),因此 spring 将其解释为 IPv4 地址并在从地址解析端口号时失败。

这很奇怪,google云没有遵循标准。截至今天,Google 云团队表示他们正在努力解决问题,但不能保证预计到达时间。

您可以在此处跟踪状态: https://issuetracker.google.com/issues/184230536?pli=1