0

升级 Spring Boot 依赖项后,Spring Boot 应用程序仅适用于 ipv4,但会引发 ipv6 错误。该应用程序部署在谷歌云运行服务上。当前版本:

      <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

4

1 回答 1

-1

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

这很奇怪,谷歌云没有遵循标准。截至今天,谷歌云团队表示他们正在努力修复,但不能保证预计到达时间。

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

于 2021-07-28T17:14:37.147 回答